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

博客介绍了控制MainCamera的方法。使用两个Handle分别控制水平和垂直旋转,以玩家输入作为控制角度并限制X轴旋转角度。将直接旋转改为用变量间接控制,通过增量方式改变。还提到相机延迟移动,使用Vector3的SmoothDamp方法实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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


11173460-9ab065af38601a76.PNG
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);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值