private string m_GlowLayerName = "Water"; // use your own layer name void Start() { m_PrevTech = m_Tech; m_Camera = GetComponent <Camera> (); QualitySettings.antiAliasing = 8; // camera for post process outline m_RTCam = new GameObject().AddComponent <Camera>(); m_RTCam.name = "RTCam"; m_RTCam.transform.parent = m_Camera.gameObject.transform; m_RTCam.enabled = false; }
void Update() { // when tech changed, do cleanup logic if (m_PrevTech != m_Tech) { if (m_PrevMouseOn) { // revert ET_NormalExpansion tech material if (m_BackupMaterial) { MeshRenderer mr = m_PrevMouseOn.GetComponent <MeshRenderer>(); mr.material = m_BackupMaterial; m_BackupMaterial = null; } // revert ET_PostProcess layer m_PrevMouseOn.layer = LayerMask.NameToLayer("Default"); m_PrevMouseOn = null; } m_PrevTech = m_Tech; } if (Input.GetMouseButton(1)) { RaycastHit hit; Ray ray = m_Camera.ScreenPointToRay(Input.mousePosition); if (Physics.Raycast(ray, out hit)) { if (m_PrevMouseOn != hit.transform.gameObject) { OnSelectedGameObjectChange(m_PrevMouseOn, hit.transform.gameObject); } m_PrevMouseOn = hit.transform.gameObject; } else { OnSelectedGameObjectChange(m_PrevMouseOn, null); m_PrevMouseOn = null; } } // different tech use different logic if (m_Tech == ETech.ET_NormalExpansion) { if (m_PrevMouseOn && m_PrevMouseOn.name != "Plane") { if (m_OverlayFlash) { float curve = Mathf.Sin(Time.time * m_OverlayFlashSpeed) * 0.5f + 0.5f; m_Overlay = curve * 0.6f; } MeshRenderer mr = m_PrevMouseOn.GetComponent <MeshRenderer>(); mr.material.SetTexture("_MainTex", m_BackupMaterial.GetTexture("_MainTex")); mr.material.SetTextureOffset("_MainTex", m_BackupMaterial.GetTextureOffset("_MainTex")); mr.material.SetTextureScale("_MainTex", m_BackupMaterial.GetTextureScale("_MainTex")); mr.material.SetColor("_OutlineColor", m_OutlineColor); mr.material.SetColor("_OverlayColor", m_OverlayColor); mr.material.SetFloat("_OutlineWidth", m_OutlineWidth); mr.material.SetFloat("_Overlay", m_Overlay); } if (m_OutlineOnly) { m_OutlineNormalExpansion.shader = Shader.Find("Selected Effect --- Outline/Normal Expansion/Outline Only"); } else { m_OutlineNormalExpansion.shader = Shader.Find("Selected Effect --- Outline/Normal Expansion/Diffuse"); } } else if (m_Tech == ETech.ET_PostProcess) { // nothing need to do } }