Example #1
0
 protected virtual void OnDestroy()
 {
     UniCameraPerformanceCookie.RemoveCookie(cookieType, this);
 }
Example #2
0
 protected override void Awake()
 {
     base.Awake();
     UniCameraPerformanceCookie.AddCookie(cookieType, this);
 }
Example #3
0
 public static int PerformanceCookieComparison(UniCameraPerformanceCookie x, UniCameraPerformanceCookie y)
 {
     return((x == y) ? 0 : 1);
 }
Example #4
0
 public static void RemoveCookie(UniCameraPerformanceCookieType type, UniCameraPerformanceCookie cookie)
 {
     performanceCookieTable.Remove((uint)type, cookie);
 }
Example #5
0
 public static void AddCookie(UniCameraPerformanceCookieType type, UniCameraPerformanceCookie cookie)
 {
     performanceCookieTable.Add((uint)type, cookie);
 }
    public void HandlePerformanceCommonProc(Camera[] camera, Transform[] cameraTransform, ref PerformanceCheckData performanceCheckData)
    {
        List <UniCameraPerformanceCookie> list = UniCameraPerformanceCookie.GetCookieList(performanceCheckData.cookieType);

        if (list == null)
        {
            return;
        }
        Vector3 cameraViewportPoint = new Vector3(0.5f, 0.5f, 0.0f);
        int     cameraCount         = camera.Length;

        for (int i = 0; i < cameraCount; i++)
        {
            cameraLookAtVector[i] = camera[i].ViewportPointToRay(cameraViewportPoint).direction;
            cameraPosition[i]     = cameraTransform[i].position;
        }
        for (int i = 0; i < list.Count; i++)
        {
            UniCameraPerformanceCookie cookie = list[i];
            //如果这个灯处于关闭状态则不处理了
            if (!cookie.enabled)
            {
                continue;
            }
            Vector3 cookiePosition = cookie.transform.position;

            UniCameraPerformanceCookie.PerformanceType checkType = UniCameraPerformanceCookie.PerformanceType.Performance_Stop;
            for (int j = 0; j < cameraCount; j++)
            {
                //计算摄像机到这个灯光的向量
                if (Mathf.Abs(cookiePosition.x - cameraPosition[j].x) > performanceCheckData.checkRange)
                {
                    checkType = UniCameraPerformanceCookie.PerformanceType.Performance_Stop;
                }
                else if (Mathf.Abs(cookiePosition.z - cameraPosition[j].z) > performanceCheckData.checkRange)
                {
                    checkType = UniCameraPerformanceCookie.PerformanceType.Performance_Stop;
                }
                else
                {
                    Vector3 direction = cookiePosition - cameraPosition[j];
                    ////计算出向量的长度
                    float distance = direction.sqrMagnitude;
                    if (distance > performanceCheckData.sqrcheckRange)
                    {
                        checkType = UniCameraPerformanceCookie.PerformanceType.Performance_Stop;
                    }
                    else
                    {
                        //需要计算这个灯光在摄像机的前面还是背面
                        float dot = Vector3.Dot(direction, cameraLookAtVector[j]);
                        if (dot >= 0.0f)//在前面
                        {
                            if (distance > performanceCheckData.sqrforntRange)
                            {
                                checkType = UniCameraPerformanceCookie.PerformanceType.Performance_Stop;
                            }
                        }
                        else//在后面
                        {
                            if (distance > performanceCheckData.sqrbackRange)
                            {
                                checkType = UniCameraPerformanceCookie.PerformanceType.Performance_Stop;
                            }
                        }
                        checkType = UniCameraPerformanceCookie.PerformanceType.Performance_Hight;
                        //已经有一个检测需要打开对象,则不再检测后面的了
                        break;
                    }
                }
            }
            //根据最好计算出来的检测类型赋值
            cookie.performanceType = checkType;

            ////计算摄像机到这个灯光的向量
            //if (Mathf.Abs(cookiePosition.x - cameraPosition.x) > performanceCheckData.checkRange)
            //{
            //    cookie.performanceType = UniCameraPerformanceCookie.PerformanceType.Performance_Stop;
            //    continue;
            //}
            //else if (Mathf.Abs(cookiePosition.z - cameraPosition.z) > performanceCheckData.checkRange)
            //{
            //    cookie.performanceType = UniCameraPerformanceCookie.PerformanceType.Performance_Stop;
            //    continue;
            //}
            //Vector3 direction = cookiePosition - cameraPosition;
            //////计算出向量的长度
            //float distance = direction.sqrMagnitude;
            //if (distance > performanceCheckData.sqrcheckRange)
            //{
            //    cookie.performanceType = UniCameraPerformanceCookie.PerformanceType.Performance_Stop;
            //    continue;
            //}
            ////需要计算这个灯光在摄像机的前面还是背面
            //float dot = Vector3.Dot(direction, cameraLookAtVector);
            //if (dot >= 0.0f)//在前面
            //{
            //    if (distance > performanceCheckData.sqrforntRange)
            //    {
            //        cookie.performanceType = UniCameraPerformanceCookie.PerformanceType.Performance_Stop;
            //        continue;
            //    }
            //}
            //else//在后面
            //{
            //    if (distance > performanceCheckData.sqrbackRange)
            //    {
            //        cookie.performanceType = UniCameraPerformanceCookie.PerformanceType.Performance_Stop;
            //        continue;
            //    }
            //}
            //cookie.performanceType = UniCameraPerformanceCookie.PerformanceType.Performance_Hight;
        }
    }