Unity实现3d角色镜头控制

该文章介绍了如何在Unity中通过MouseX和MouseY轴向输入控制镜头旋转。通过Vector3和Quaternion进行方向更新和转换,同时应用Mathf.Clamp限制垂直旋转范围,并实现相机跟随角色移动,调整相机与角色的距离。

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

鼠标控制镜头围绕角色旋转

在unity中提供了轴向输入控制,这里选择Mouse X与Mouse Y来控制鼠标输入。

 创建一个向量来存储当前镜头方向,并在update函数中更新鼠标控制后的方向。

    private Vector3 angle;
    angle.x += Input.GetAxis("Mouse X")*xSpeed*Time.deltaTime;
    angle.y -= Input.GetAxis("Mouse Y")*ySpeed*Time.deltaTime;

通过Mathf.Clamp()函数来限制垂直方向旋转。

        angle.y = Mathf.Clamp(angle.y, yMinLimit, yMaxLimit);

将移动后的方向转换为Quaternion,并赋值给相机。


Quaternion rotation = Quaternion.Euler(angle.y, angle.x, 0);

transform.rotation = rotation;
​

​

并更新相机位置,使角色在移动过程中相机跟随角色,其中camMultiple用来控制相机与角色之间距离,以角色中心点为中心,所以在后面保持y为1(角色高度为2)。

        transform.position = rotation * oriPos*camMultiple + new Vector3(target.position.x,1,target.position.z);

总体代码为:

​
    Vector3 oriPos;
    public Transform target;
    public float xSpeed=800f;
    public float ySpeed=800f;
    public float yMin=-20f;
    public float yMax=60f;

    public float camMultiple = 0.4f;

    private Vector3 angle;

    private void Awake()
    {
        oriPos = transform.position;
        angle = transform.eulerAngles;
    }
    
    void Update()
    {
        angle.x += Input.GetAxis("Mouse X")*xSpeed*Time.deltaTime;
        angle.y -= Input.GetAxis("Mouse Y")*ySpeed*Time.deltaTime;
        angle.y = Mathf.Clamp(angle.y, yMin, yMax);

        Quaternion rotation = Quaternion.Euler(angle.y, angle.x, 0);

        transform.rotation = rotation;
        transform.position = rotation * oriPos*camMultiple + new Vector3(target.position.x,1,target.position.z);

        
    }

​

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值