目录
一、前言
角色的移动、控制、下蹲等操作
二、前期知识
三种实现FPS Controller的区别:
- Transform Translate
Transform提供了一个Translate方法,允许物体移动,但是无物理碰撞 - Rigid body+Capsule
符合物理学,有物理碰撞,无法滞空运动,可与Physics Object交互 - CharacterController
有物理碰撞,提供的API相对多,无法与Physics Object互动,可实现滞空运动,提供多种运动效果例如slopes、steps等
三、制作FPS角色控制
使用Rigidbody&Capsule Colider制作FPS角色控制器
1、在场景中添加一个空物体,命名为FPController,并在该物体下创建一个Capsule,把Capsule Collider组件去掉
2、把场景中的Main Camera添加到FPController中,并将相机调整到capsule的高处
3、在FPController里添加Rigidbody,并取消勾选use gravity,并勾选freeze rotation的X、Z
4、使相机随鼠标环顾四周:
- 由于鼠标左右移动对应着坐标系中的X轴,前后移动对应着Y轴,所以让相机上下移动需要改变X轴的值,左右移动需要改变Y轴的值
- 创建新的脚本FPMouseLook,通过
Input.GetAxis("Mouse X")
取用户鼠标x轴的输入,通过Input.GetAxis("Mouse Y")
去用户鼠标Y轴的输入,同时,需要Transform
才能引用到camera的Rotation
,start()初始化后,通过cameraTransform.rotation=Quaternion.Eular(0,tmp_MouseX,0)
改变rotation的值,并设置好相机旋转是用户鼠标的旋转角度×灵敏度:cameraRotation.y+=tmp_MouseX*MouseSensitivity
,此时可以实现左右旋转,实现上下旋转的区别是设置相机旋转需要-
注意:这里需要通过project settings-input manager来自定义一个角色的值 - 用vector2限制camera的最大角度最小角度,设置在一定角度之内环顾
var tmp_MouseX = Input.GetAxis("Mouse X");
var tmp_MouseY = Input.GetAxis("Mouse Y");
CameraRotation.y += tmp_MouseX