Unity第一人称摄像机

序言

做第一人称游戏的时候,摄像机的调整是必不可少的,就此做个记录。

原理

在Unity中,物体要在世界中显示,必不可少的就是Transform组件。在第一人称游戏中的视角变换,只是我们旋转摄像机,改变其ransform组件下的Roation属性。

当我们改变其中的X值时,摄像机会绕着X轴旋转,当其值变大时,摄像机会朝顺时针转动,当其值变小时,摄像机会朝逆时针转动。Y、Z值也是如此。

 

而在第一人称下我们不需要让摄像机跟着Z轴旋转。当我们鼠标垂直向上滑或者向下滑的时候,在游戏中我的视角也是向上或者向下,此时我们需要改变的抽象就是X,同理当我们水平滑动鼠标的时候,此时摄像机是依着Y轴旋转的。

操作

一、设置参数

public float mouseSentity;     //鼠标灵敏度
public Vector2 limitPosotion;  //限制摄像机旋转的角度
private Vector3 cameraPosition;  //摄像机的三维参数

第一人称游戏都有鼠标灵敏度一说,实际上就是给摄像机旋转的一个速度,当然实际游戏中的灵敏度和这个参数是一一对应。,限制摄像机的旋转角度用一个二维向量来赋值,当然可以设置两个float变量来作为限制,也是一样的。

二、输入

private void Update()
    {
        float mouseX = Input.GetAxis("Mouse X");
        float mouseY = Input.GetAxis("Mouse Y");
    }

鼠标的输入可以在Unity中Edit-ProjectSettings-InputManager中找到。MouseX是水平,MouseY是垂直。

三、存放数据

把设置好的变量放的设置的临时变量cameraPosition中。

  private void Update()
    {
        float mouseX = Input.GetAxis("Mouse X");
        float mouseY = Input.GetAxis("Mouse Y");

        cameraPosition.x -= mouseY * mouseSentity;

/* canmeraPosition.x赋给Roation.x,当我们向下滑动鼠标的时候,
   摄像机应该沿着X轴顺时针旋转,Roation.x的值应该变大。
   而mouseY为负数,乘以我们的灵敏度则得到了负的改变量,
   临时变量cameraPosition.x应该在原有基础上减去这个负值得到正值*/

        cameraPosition.y += mouseX * mouseSentity;

/* canmeraPosition.y赋给Roation.y,当我们向右滑动鼠标的时候,
   摄像机应该沿着y轴顺时针旋转,Roation.y的值应该变大。
   而mouseX为正数,乘以我们的灵敏度则得到了正的改变量,
   临时变量cameraPosition.x应该在原有基础上加上这个正值得到正值*/

        cameraPosition.x = Mathf.Clamp(cameraPosition.x, limitPosotion.x, limitPosotion.y);

/* Mathf.Clap(value,min,max)用来限制摄像机上下的旋转
   在游戏中,我们不可能360度在上下方向无限制旋转,而需要限制的值就是Roation.x的值,
   也就是cameraPosition.x的值*/

    }

四、赋值

private void LateUpdate()
    {
        Player.Instance.transform.rotation = Quaternion.Euler(0, cameraPosition.y, 0);
//游戏人物随摄像机水平转动而转动
        transform.rotation = Quaternion.Euler(cameraPosition.x, cameraPosition.y, 0);
//摄像机第一人称视角
   }

Quaternion.Euler(float x,float y,float z)

返回一个旋转,它围绕对应轴旋转对应度(按该顺序应用)。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

米芝鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值