任务:通过鼠标或遥杆的旋转来控制人物摄像机的旋转(抬头,低头,左右前后看)
第一步,场景中拖入一个人物,并且添加组件:Character Controller
第二步,给人物挂载一个脚本,比如PlayerController.cs
第三步,处理水平旋转
① 在Update里添加一个RotateHandler(); 此方法为控制人物旋转的方法
private void Update()
{
RotateHandler();
}
② 捕获鼠标或者遥杆在水平方向的移动
这里要注意一点,需要在Eidt == Project Settings ===Input Manager 添加相关按键,比如Mouse X (已有)
开始写代码捕获
private void RotateHandler()
{
// 人物水平转头
{
// 使人物绕着自身Y轴旋转 , 请注意,左右转头是绕着Y轴旋转,(unity为左手世界坐标轴)
transform.Rotate(
new Vector3(0f, 鼠标旋转的量,
0f), Space.Self);
}
}
那这里,鼠标旋转的量如何获得?请继续往下看
我们通过文档得知,获取水平方向的旋转,是GetAxis,有些同学可能不清楚,遥杆的速度和鼠标的速度差别特别大,所以,我们在这里使用一点小技巧来捕获遥杆和鼠标,让其速度保持一直,这样,我们就可以统一设置旋转的灵敏度我们定义 鼠标水平旋转的量= GetHorizontal()
public float GetHorizontal()
{
return GetAxisValue("Mouse X");
}
然后呢,GetAxisValue 为获取鼠标旋转的量
float GetAxisValue(string mouseInput)
{
//获取旋转的量
return Input.GetAxis(mouseInput);
}
到此为止,我们已经完成了人物的水平转头
第四步,处理垂直旋转
添加相关按键,比如Mouse Y (已有)请注意,如果没有将Invert打钩,则会出现垂直翻转的问题哦
垂直转头,也就是抬头低头,和水平转头区别是,水平是人物本身旋转,抬头低头是人物摄像机在旋转,人物旋转时,他的子物体会跟着旋转,但是,低头属于子物体旋转,所以我们要先获取到人物摄像机的组件,再进行旋转
第一步,定义人物主摄像机
public Camera PlayerCamera;
我们在人物的inspector面板中,将人物摄像机拖入到这个公共变量上
现在我们已经可以操作人物摄像机来旋转了,那我们问题来了,如何获取到垂直旋转的量呢?
很简单,我们只需要 使用我们的方法来获得 Mouse Y 的量
public float GetVertical()
{
return GetAxisValue("Mouse Y");
}
鼠标旋转的量也拿到了,那怎么应用到摄像机呢?
这里,其实就是让摄像机旋转到鼠标当前所在的位置即可
- 首先,我们定义当前摄像机的旋转角度为0,也就是正对着屏幕正前方
float cameraVerticalAngle = 0f;
- 然后我们处理摄像头旋转
// 人物垂直转头
{
// 设置摄像机旋转的量
cameraVerticalAngle += GetVertical() * RotationMultiplier;
// 旋转摄像机
PlayerCamera.transform.localEulerAngles = new Vector3(cameraVerticalAngle, 0, 0);
}
到这里,有小伙伴可能要问了,我的头都向上转到可以看到屁股了,怎么办?
我们限制他的旋转角度即可
// 人物垂直转头
{
// 设置摄像机旋转的量
cameraVerticalAngle += GetVertical() * RotationMultiplier;
//限制旋转的最大角度,最大抬头70°,最大低头89° ,自己设置即可
cameraVerticalAngle = Mathf.Clamp(cameraVerticalAngle, -70f, 89f);
// 旋转摄像机
PlayerCamera.transform.localEulerAngles = new Vector3(cameraVerticalAngle, 0, 0);
}
END