public void exitNavMode(CameraNavMode navMode) { if (navMode == CameraNavMode.Follow) { m_navModeFollowCount--; if (m_navModeFollowCount <= 0) { m_navModeFollowCount = 0; } } if (navMode == CameraNavMode.Target) { m_navTragetTransform = null; } if (navMode == CameraNavMode.FloatingAngle) { m_navTragetTransform = null; } if (navMode != NavMode) { return; } else { NavMode = CameraNavMode.None; } }
private Vector3 m_navTargetAngle = Vector3.zero; //转向指定角度 public void enterNavMode(CameraNavMode enterNavMode, Transform refTransform, Vector3 refAngle) { if (camCtrl == null) { return; } if (enterNavMode == CameraNavMode.Follow) { m_navModeFollowCount++; } if (NavMode > enterNavMode) { return; //正在进行优先级更高的操作,直接挡掉了 } if (enterNavMode == CameraNavMode.Target) { if (refTransform) { if (m_navTragetTransform == refTransform) { //已经跟踪在旋转了,直接退了吧 return; } Vector3 direction = refTransform.position - soldier.gameObject.transform.transform.position; if (direction.magnitude > rotateStartMaxDistance || direction.magnitude < rotateStartMinDistance) { return; //距离限制不开启 } if (ScreenRaycast.isInScreen(refTransform.position)) { return; //在屏幕内的不开启 } direction.y = 0; direction.Normalize(); float angle = Mathf.Rad2Deg * (Mathf.Atan2(direction.x, direction.z)); float detaAngle = Mathf.DeltaAngle(m_userDesireAngle.y, angle); if (Mathf.Abs(detaAngle) <= rotateStartAngle) //小于rotateStartAngle度不开启 { return; } if (enterNavMode != NavMode) //刚进入此模式,从初速度开始旋转 { m_approximageRotateSpeed = rotateStartSpeed; } m_navTragetTransform = refTransform; } else { if (NavMode == enterNavMode) { exitNavMode(NavMode); } return; } } else if (enterNavMode == CameraNavMode.FloatingAngle) { if (refAngle.sqrMagnitude > 0.01f) { m_navTargetAngle = refAngle; } else { exitNavMode(enterNavMode); } } NavMode = enterNavMode; }