Unity-黑暗之魂复刻-角色摄相机

1.使用两个Handle控制MainCamera的水平和垂直的旋转,PlayerHandle控制水平旋转,cameraHandle控制垂直旋转,这样我们可以很方便的控制相机。


MainCamera.PNG

2.在代码中我们用玩家输入作为控制的角度

    public PlayerInput pi;
    public float horizontalSpeed = 20.0f;
    public float verticalSpeed = 100.0f;

    private GameObject playerHandle;
    private GameObject cameraHandle;
    // Use this for initialization
    void Awake () {
        cameraHandle = transform.parent.gameObject;
        playerHandle = transform.parent.parent.gameObject;
    }
    
    // Update is called once per frame
    void Update () {
        playerHandle.transform.Rotate(Vector3.up, pi.Jright * horizontalSpeed * Time.deltaTime);
        cameraHandle.transform.Rotate(Vector3.right, pi.Jup * verticalSpeed * Time.deltaTime);
    }

3.限制在X轴旋转的角度
将原来的直接用Rotate旋转改为,用一个变量作为间接值(不能直接限制cameraHandle的euler的x,因为我们在设置其值的时候,会自动将负的值转换为正的),所以我们用一个不受限制的中间量,量的改变用增量的方式来实现。

        tempEulerX += pi.Jup * -verticalSpeed * Time.deltaTime;
        tempEulerX = Mathf.Clamp(tempEulerX, -40.0f, 30.0f);
        //这里要用localEulerAngles,否则y不会使用父类的y,而是0,导致playerHandle的旋转控制不了cameraHandle的左右
        cameraHandle.transform.localEulerAngles = new Vector3(tempEulerX, 0,0);

4.相机延迟移动
我们使用Vector3中的Static Methods中的SmoothDamp方法,此方法常用于摄像机的移动,在一定时间(deltaTime)后将current的value转换到target的value。

camera.transform.position = Vector3.SmoothDamp
            (camera.transform.position,transform.position, ref cameraDampVelocity, 0.2f);
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容