예제 #1
0
    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;
    }
예제 #2
0
    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
        }
    }