在 Unity 中创建第一人称控制器
本教程将指导您在 Unity 中构建一个简单的第一人称控制器。第一人称控制器允许玩家通过流畅的移动和相机旋转探索 3D 世界。我们将使用基本的 C# 脚本和 Unity 的内置 CharacterController 组件。
1. 设置场景
首先为第一人称控制器设置基本的场景环境:
- 在Unity中,创建一个新的 3D 场景。
- 转到 GameObject > 3D Object > Plane 创建地面。
- 调整飞机的比例,使其足够大,以便玩家可以走动。
- 转到 GameObject > 3D Object > Cube 添加要交互的障碍物或墙壁。
2. 添加玩家对象
为了代表玩家,我们将使用胶囊对象:
- 转到 GameObject > 3D Object > Capsule 将胶囊添加到场景中。
- 将胶囊放置在略高于地面的位置(例如,Position = (0, 1, 0))。
- 将胶囊重命名为Player。
- 删除 Capsule Collider 组件,因为 CharacterController 将处理碰撞。
- 通过选择 Player,然后单击 Inspector 中的 Add Component 并搜索 CharacterController,将 CharacterController 组件添加到 Player 对象。
3. 编写第一人称控制器脚本
现在,让我们创建一个脚本来处理玩家移动和摄像机旋转:
- 在项目窗口中,右键单击并选择 Create > C# Script。将其命名为 FirstPersonController。
- 将脚本从项目窗口拖拽到层次结构中的播放器中,将其附加到播放器对象上。
打开脚本并将内容替换为以下代码:
using UnityEngine;
public class FirstPersonController : MonoBehaviour
{
public float moveSpeed = 5f;
public float mouseSensitivity = 2f;
public float gravity = -9.81f;
private CharacterController controller;
private Vector3 velocity;
private Transform cameraTransform;
void Start()
{
controller = GetComponent();
cameraTransform = Camera.main.transform;
cameraTransform.position = new Vector3(transform.position.x, transform.position.y + 1.5f, transform.position.z);
cameraTransform.parent = transform; // Attach camera to player
}
void Update()
{
// Player movement
float moveX = Input.GetAxis("Horizontal") * moveSpeed;
float moveZ = Input.GetAxis("Vertical") * moveSpeed;
Vector3 move = transform.right * moveX + transform.forward * moveZ;
controller.Move(move * Time.deltaTime);
// Apply gravity
if (controller.isGrounded && velocity.y < 0)
{
velocity.y = -2f;
}
velocity.y += gravity * Time.deltaTime;
controller.Move(velocity * Time.deltaTime);
// Camera rotation
float mouseX = Input.GetAxis("Mouse X") * mouseSensitivity;
float mouseY = Input.GetAxis("Mouse Y") * mouseSensitivity;
transform.Rotate(Vector3.up * mouseX);
cameraTransform.Rotate(Vector3.left * mouseY);
}
}
4. 安装相机
对于第一人称视角,相机需要附加到玩家身上:
- 在层次结构中选择 Main Camera。
- 将其放置在 Player 对象略上方(例如,Y = 1.5)。
- 将相机拖到层次结构中的 Player 对象上,使其成为 Player 的子对象。这将使其跟随玩家的移动和旋转。
5. 配置输入
Unity 的输入管理器使用预定义的轴名称,例如“水平”和“垂直”表示移动,以及“鼠标 X”和“鼠标 Y”表示鼠标输入。这些是自动配置的,但您可以在 编辑 > 项目设置 > 输入管理器 中调整灵敏度。
6. 测试控制器
现在第一人称控制器已经准备好了,点击播放按钮来测试它:
- 使用 W、A、S、D 让玩家向前、向后和向侧面移动。
- 移动鼠标来旋转相机并环顾四周。
- 通过走下任何凸起的物体来观察玩家是否自然落下,以确保重力起作用。
7. 增强控制器
您可以通过添加以下内容进一步增强第一人称控制器:
- 按住 Shift 键时增加移动速度,实现冲刺功能。
- 通过检测玩家何时按下空格键并施加向上的速度来实现跳跃逻辑。
- 攀爬或蹲伏机制可让玩家与环境进行更复杂的互动。
结论
使用此基本的第一人称控制器,您现在拥有一个可用于探索 3D 环境的功能性玩家设置。通过自定义和扩展脚本,您可以添加更多功能和交互以满足游戏需求。