UNITY-个人练习FPS(Demo)-4

该文介绍如何在Unity中创建一个相机类,使视角能随鼠标移动并实现玩家的左右旋转。通过获取鼠标输入,调整相机和玩家的旋转角度,使用Quaternion.AngleAxis函数处理绕轴旋转,限制旋转范围,确保流畅的游戏体验。
摘要由CSDN通过智能技术生成

建立相机类

实现视角随鼠标移动 并实现玩家左右旋转随相机左右方向

  1. 建立Camera物体 放置于玩家物体下 设置相对位置position为(0,2,-0.2)

设置Tag为MainCamera主摄像机

  1. 定义方法--获取鼠标输入

定义变量:

{
    public Vector2 mouseLookSensitivity=new Vector2(5,5);//鼠标灵敏度
    public Vector2 rotationXLimit = new Vector2(87, -87);//绕X轴旋转角度
    public Vector2 rotationYLimit = new Vector2(-360, 360);//绕Y轴旋转角度
    public Vector3 positionOffset = new Vector3(0, 2,-0.2f);//相机相对位置

定义方法:

用parameter脚本调用其中的二维变量inputSmoothLook,此变量在start函数中已用鼠标的GetAxisRaw函数赋值

注意:要将 currentMouseLook.y *= -1;

想要视角绕X轴向下旋转,向下看,即x值增大;那么鼠标输入的y方向(鼠标上下)就要向负方向 即x减小。所以倒置鼠标输入y方向。

    private void GetMouseLook()
    {
        currentMouseLook.x = parameter.inputSmoothLook.x;//沿X轴方向
        currentMouseLook.y = parameter.inputSmoothLook.y;//沿y轴方向

        currentMouseLook.x *= mouseLookSensitivity.x;
        currentMouseLook.y *= mouseLookSensitivity.y;

        currentMouseLook.y *= -1;
    }
  1. 将鼠标旋转角度交给视角旋转角度变量

currentMouseLook.x是鼠标沿x轴方向的移动,将之交给y_Angle,y_Angle即为真实视角的绕y轴旋转角度,即左右旋转

因此:

y_Angle += currentMouseLook.x;

x_Angle += currentMouseLook.y;

随后在Update方法中调用此方法

    private void UpdateInput()
    {
        //若鼠标输入为0
        if (parameter.inputSmoothLook == Vector2.zero) return;

        GetMouseLook();
        y_Angle += currentMouseLook.x;
        x_Angle += currentMouseLook.y;
        //限制左右旋转
        y_Angle = y_Angle < -360 ? y_Angle += 360 : y_Angle;
        y_Angle = y_Angle > 360 ? y_Angle -= 360 : y_Angle;
        y_Angle = Mathf.Clamp(y_Angle,rotationYLimit.x,rotationYLimit.y);
        //限制上下旋转
        x_Angle = x_Angle < -360 ? x_Angle += 360 : x_Angle;
        x_Angle = x_Angle > 360 ? x_Angle -= 360 : x_Angle;
        x_Angle = Mathf.Clamp(x_Angle, -rotationXLimit.x, -rotationXLimit.y);
    }
  1. 将真实视角旋转(y_Angle、x_Angle)交给玩家和玩家下所挂的camera

Quaternion.AngleAxis函数

  • Quaternion:四元数,这个在Unity中基本就是用于计算方位、旋转的;

  • AngleAxis:这个就表示围绕一个轴,进行指定的角度旋转

即为:指定一个轴,围绕该轴旋转指定的角度,得到一个新的旋转结果

其中,将y_Angle 即绕y轴旋转角度 ,交给玩家方向旋转角度,实现玩家左右旋转

并锁定玩家沿x轴方向的旋转,因为玩家身体朝向只需绕y轴,不需要绕x轴

再将x_Angle交给camera,实现相机的上下旋转

鼠标向下移动 因倒置 所以currentMouse.y为正值 x_Angle为正值并叠加增大,交给Quaternion.AngleAxis函数,x_Angle向正增大,即在x轴右方向沿逆时针旋转,即实现camera视角向下旋转。

在LateUpdate方法中实现此功能

    private void LateUpdate()
    {
        //绕y轴旋转(左右) 将旋转角交给父物体 即玩家 实现玩家左右旋转
        Quaternion xQuaternion = Quaternion.AngleAxis(y_Angle,Vector3.up);//Vector3.up指y轴 即绕y轴进行旋转
        Quaternion yQuaternion = Quaternion.AngleAxis(0, Vector3.left);
        m_Transform.parent.rotation= xQuaternion*yQuaternion;

        yQuaternion = Quaternion.AngleAxis(x_Angle,Vector3.right);
        m_Transform.rotation = xQuaternion * yQuaternion;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值