Esempio n. 1
0
    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);
            }
        }
    }
Esempio n. 2
0
    //更新相机方向
    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;
                }
            }
        }
    }