protected virtual void OnDestroy() { UniCameraPerformanceCookie.RemoveCookie(cookieType, this); }
protected override void Awake() { base.Awake(); UniCameraPerformanceCookie.AddCookie(cookieType, this); }
public static int PerformanceCookieComparison(UniCameraPerformanceCookie x, UniCameraPerformanceCookie y) { return((x == y) ? 0 : 1); }
public static void RemoveCookie(UniCameraPerformanceCookieType type, UniCameraPerformanceCookie cookie) { performanceCookieTable.Remove((uint)type, cookie); }
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; } }