protected void UpdateCameraCtrlInfo() { _IsMoving = HostPlayerComponent != null && (HostPlayerComponent.HasBehavior(BehaviorType.Move) || HostPlayerComponent.HasBehavior(BehaviorType.Follow) || HostPlayerComponent.HasBehavior(BehaviorType.JoyStickMove)); if (!_IsModeChangeRecover && !_IsSkillRecover) { if (IsFightLock && _FightLockTarget != null) { //PVE锁定视角 Vector3 local_forward = _FightLockTarget.transform.position - LookAtTarget.position; UpdateForwardDeg(local_forward); } else if (_IsMoving && _CamCtrlMode == CTRL_MODE.FOLLOW && !_IsLockCurState) { //移动中相机Follow Vector3 local_forward = LookAtTarget.forward; UpdateForwardDeg(local_forward); } } }
//更新相机方向 protected void UpdateCameraOrientation(float dt) { if (_IsDraggingScreen) { return; } float deg_diff_pitch = 0; float deg_diff_yaw = 0; float tick_pich = 0; float tick_yaw = 0; if (IsFightLock || _IsModeChangeRecover || _IsSkillRecover || _CamCtrlMode == CTRL_MODE.FOLLOW) { bool isMovingFixed = false; //是否属于移动中3D相机自动修正 if (!IsFightLock && !_IsModeChangeRecover && !_IsSkillRecover && !_IsMoveToDest && _CamCtrlMode == CTRL_MODE.FOLLOW) { if (!_IsMoving || _IsLockCurState) { return; } isMovingFixed = true; } if (!_IsSkillRecover) { //pitch deg_diff_pitch = ClipDegreeDiff(_PitchDegDest - _PitchDeg); float pitch_speed = GetCamPitchSpeed(deg_diff_pitch); tick_pich = pitch_speed * dt; if (deg_diff_pitch > tick_pich) { _PitchDeg += tick_pich; } else if (deg_diff_pitch < -tick_pich) { _PitchDeg -= tick_pich; } else { _PitchDeg = _PitchDegDest; CheckMoveToDestState(); } _PitchDeg = ClipPitchDegree(_PitchDeg); } //yaw { deg_diff_yaw = ClipDegreeDiff(_YawDegDest - _YawDeg); float yaw_speed = GetCamYawSpeed(deg_diff_yaw); if (isMovingFixed) { float role_cur_speed = 0f; //主角当前移动速度 if (HostPlayerComponent != null) { role_cur_speed = HostPlayerComponent.GetHostPlayerMoveSpeed(); } float role_default_speed = CCamCtrlMan.Instance.CurProDefaultSpeed; //当前职业默认移动速度 //Common.HobaDebuger.LogFormat("role_cur_speed:{0}, role_default_speed:{1}, yaw_speed_origin:{2}", role_cur_speed, role_default_speed, yaw_speed); //摄像机最终跟随速度 = 摄像机跟随速度 * 当前移动速度 / 初始移动速度 if (role_cur_speed > 0f && role_default_speed > 0f) { yaw_speed *= (role_cur_speed / role_default_speed); } } //Common.HobaDebuger.LogFormat("yaw_speed:{0}", yaw_speed); tick_yaw = yaw_speed * dt; if (deg_diff_yaw > tick_yaw) { _YawDeg += tick_yaw; } else if (deg_diff_yaw < -tick_yaw) { _YawDeg -= tick_yaw; } else { _YawDeg = _YawDegDest; } _YawDeg = ClipYawDegree(_YawDeg); } if (_IsModeChangeRecover) { if (Mathf.Abs(_PitchDegDest - _PitchDeg) <= Util.FloatZero && Mathf.Abs(_YawDegDest - _YawDeg) <= Util.FloatZero) { _IsModeChangeRecover = false; } } if (_IsSkillRecover) { if (Mathf.Abs(_YawDegDest - _YawDeg) <= Util.FloatZero) { _IsSkillRecover = false; } } if (_IsChangeLockTarget) { if (Mathf.Abs(_YawDegDest - _YawDeg) <= Util.FloatZero) { _IsChangeLockTarget = false; } } } }