第一步:
在项目中创建一个胶囊体或导入模型并将相机拖入子层级中,把相机调整至合适的位置
第二步:
给角色添加Character Controller组件,创建一个PlayerMove(脚本名随意取)移动脚本,代码如下:
//使用前为角色添加CharacterController组件
public CharacterController player;//角色控制器
public Camera cameraPlayer;//第一人称镜头
private float moveSpeed = 2f;//移动速度
private float gravity = 9.8f;//重力
private Vector3 player_Vec = Vector3.zero;
private void FixedUpdate()
{
MovePlayerFirst();
}
//第一人称视角移动
private void MovePlayerFirst()
{
if (player != null)
{
if (player.isGrounded)//角色触地才能移动
{
float x = Input.GetAxis("Vertical");
float y = Input.GetAxis("Horizontal");
player_Vec = x * cameraPlayer.transform.forward + y * cameraPlayer.transform.right;//根据镜头朝向确定移动方向
}
player_Vec.y -= gravity * Time.fixedDeltaTime;//模拟重力
player.Move(player_Vec * moveSpeed * Time.fixedDeltaTime);
}
}
将创建好的代码添加到角色里,如下图所示:
这时运行可发现角色能在场景中前后左右移动,但是无法改变方向。
第三步:
创建一个新的脚本命名为CameraRotation(脚本名自拟),添加以下代码:
public static Vector3 camera_Vec = Vector3.zero;
private float cameraRotSpeed = 300f;//旋转速度
private void Update()
{
RotationCamera();
}
//旋转相机
private void RotationCamera()
{
float x = Input.GetAxis("Mouse X");
float y = Input.GetAxis("Mouse Y");
camera_Vec.x -= y * cameraRotSpeed * Time.deltaTime;
camera_Vec.y += x * cameraRotSpeed * Time.deltaTime;
camera_Vec.x = Mathf.Clamp(camera_Vec.x, 0, 60);//限制垂直角度
transform.rotation = Quaternion.Euler(camera_Vec.x, camera_Vec.y, 0);
}
把脚本添加到相机中,如下图所示:
运行即可实现完整的第一人称自由移动了