前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Unity-黑暗之魂复刻-角色摄相机

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

作者头像
祝你万事顺利
发布2019-05-29 17:03:19
4890
发布2019-05-29 17:03:19
举报
文章被收录于专栏:Unity游戏开发Unity游戏开发

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

MainCamera.PNG

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

代码语言:javascript
复制
    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,因为我们在设置其值的时候,会自动将负的值转换为正的),所以我们用一个不受限制的中间量,量的改变用增量的方式来实现。

代码语言:javascript
复制
        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。

代码语言:javascript
复制
camera.transform.position = Vector3.SmoothDamp
            (camera.transform.position,transform.position, ref cameraDampVelocity, 0.2f);
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019.05.08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档