序言
做第一人称游戏的时候,摄像机的调整是必不可少的,就此做个记录。
原理
在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)
返回一个旋转,它围绕对应轴旋转对应度(按该顺序应用)。