示例#1
0
    void Update()
    {
        Vector3 puckTarget = m_Puck.GetTargetPosition();

        //Vector4 posPuck = new Vector4(
        //    m_Puck.transform.localPosition.x / transform.localScale.x,
        //    m_Puck.transform.localPosition.y / transform.localScale.y,
        //    m_Puck.transform.localPosition.z / transform.localScale.z,
        //    1);
        Vector3[] directions = new Vector3[] {
            Vector3.left,
            Vector3.right,
            Vector3.down,
            Vector3.up,
            Vector3.back,
            Vector3.forward,
        };
        int   maxDirIndex = 0;
        float maxDir      = Vector3.Dot(directions[0], puckTarget);

        for (int i = 0; i < 6; i++)
        {
            float dir = Vector3.Dot(directions[i], puckTarget);
            if (dir > maxDir)
            {
                maxDir      = dir;
                maxDirIndex = i;
            }
        }
        Vector4 posPuck = new Vector4(
            puckTarget.x / transform.localScale.x,
            puckTarget.y / transform.localScale.y,
            puckTarget.z / transform.localScale.z,
            1);

        for (int i = 0; i < m_Paddles.Length; i++)
        {
            m_Materials[i].SetVector("_PuckPosition", posPuck);
            Vector4 posPaddle = new Vector4(
                m_Paddles[i].transform.localPosition.x / transform.localScale.x,
                m_Paddles[i].transform.localPosition.y / transform.localScale.y,
                m_Paddles[i].transform.localPosition.z / transform.localScale.z,
                1);
            m_Materials[i].SetFloat("_PuckTargetOpacity", i == maxDirIndex ? 1.0f : 0.0f);
            m_Materials[i].SetVector("_PaddlePosition", posPaddle);
            m_Materials[i].SetMatrix("_QuadAdjust", m_Matrices[i]);
        }
    }