在 Unity 中创建第一人称控制器

本教程将指导您在 Unity 中构建一个简单的第一人称控制器。第一人称控制器允许玩家通过流畅的移动和相机旋转探索 3D 世界。我们将使用基本的 C# 脚本和 Unity 的内置 CharacterController 组件。

1. 设置场景

首先为第一人称控制器设置基本的场景环境:

  1. 在Unity中,创建一个新的 3D 场景。
  2. 转到 GameObject > 3D Object > Plane 创建地面。
  3. 调整飞机的比例,使其足够大,以便玩家可以走动。
  4. 转到 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. 编写第一人称控制器脚本

现在,让我们创建一个脚本来处理玩家移动和摄像机旋转:

  1. 在项目窗口中,右键单击并选择 Create > C# Script。将其命名为 FirstPersonController
  2. 将脚本从项目窗口拖拽到层次结构中的播放器中,将其附加到播放器对象上。

打开脚本并将内容替换为以下代码:

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 环境的功能性玩家设置。通过自定义和扩展脚本,您可以添加更多功能和交互以满足游戏需求。