Unity组件大全之 Physics物理 |(55)Character Controller:打造逼真的角色控制

在这里插入图片描述

📂 Unity 开发资源汇总 | 插件 | 模型 | 源码

💓 欢迎访问 Unity 打怪升级大本营

在Unity中,创建逼真的角色控制和移动是许多游戏项目的核心需求。Character Controller组件提供了一种简单而强大的方式来实现这些功能,相比 Rigidbody,Character Controller 提供了更高的控制灵活性,尤其适合需要精准移动和跳跃的角色。它允许开发者为角色添加碰撞检测、自动斜坡行走和复杂的移动控制。

在这里插入图片描述

华丽的分割线

📂 Unity组件大全 | 目录索引


标题1

🎬 什么是 Character Controller?

Character Controller是Unity中的一个组件,专门用于处理带有碰撞体的角色的移动和碰撞。它提供了一种比简单的刚体(Rigidbody)更高级的控制方式,使得开发者可以轻松实现角色的行走、跳跃和其他复杂动作。

在这里插入图片描述


标题2

🔨 Character Controller 的核心特性

1. 碰撞检测与响应

Character Controller自动处理与环境的碰撞,包括斜坡行走和楼梯上下。

2. 移动控制

开发者可以通过代码精确控制角色的移动,包括速度、方向和跳跃。

3. 定制化

可以调整各种参数,如移动速度、跳跃高度和碰撞半径,以适应不同的游戏风格。

4. 支持多层

Character Controller支持多层碰撞,使得角色可以在复杂的游戏环境中自由移动。


标题3

📦 如何使用 Character Controller 组件

1. 添加组件

在Unity编辑器中,选择你的角色对象,然后在Inspector面板中点击“Add Component”,搜索并添加“Character Controller”组件。

在这里插入图片描述

2. 配置组件

Character Controller组件的设置中,你可以调整角色的大小、移动速度、跳跃高度和其他参数。

3. 编写控制脚本

使用C#脚本,你可以控制角色的移动和跳跃。


标题4

♨️ 示例代码

示例1:角色移动与跳跃

using UnityEngine;

[RequireComponent(typeof(CharacterController))]
public class PlayerController : MonoBehaviour
{
    public float moveSpeed = 5f; // 角色移动速度
    public float jumpHeight = 2f; // 跳跃高度
    public float gravity = -9.81f; // 重力

    private CharacterController controller;
    private Vector3 velocity;
    private bool isGrounded;

    void Start()
    {
        // 获取角色的 Character Controller 组件
        controller = GetComponent<CharacterController>();
    }

    void Update()
    {
        // 检测角色是否在地面上
        isGrounded = controller.isGrounded;

        if (isGrounded && velocity.y < 0)
        {
            velocity.y = -2f; // 当角色在地面时,重置垂直速度
        }

        // 获取水平移动输入(WASD 或方向键)
        float moveX = Input.GetAxis("Horizontal");
        float moveZ = Input.GetAxis("Vertical");

        // 根据输入计算角色的移动方向
        Vector3 move = transform.right * moveX + transform.forward * moveZ;

        // 通过 Character Controller 移动角色
        controller.Move(move * moveSpeed * Time.deltaTime);

        // 跳跃处理
        if (Input.GetButtonDown("Jump") && isGrounded)
        {
            // 使用公式计算跳跃的垂直速度:v = sqrt(h * -2 * g)
            velocity.y = Mathf.Sqrt(jumpHeight * -2f * gravity);
        }

        // 应用重力
        velocity.y += gravity * Time.deltaTime;

        // 垂直方向上的移动(重力和跳跃)
        controller.Move(velocity * Time.deltaTime);
    }
}
代码解析
  1. CharacterController controller:获取 Character Controller 组件,用于控制角色的移动。
  2. isGrounded = controller.isGrounded:检测角色是否接触地面,用于处理跳跃和重力逻辑。
  3. Input.GetAxis("Horizontal")Input.GetAxis("Vertical"):获取玩家的输入,用于控制角色在 X 和 Z 方向上的移动。
  4. controller.Move():通过 Character ControllerMove() 方法实现角色的移动。
  5. 跳跃:通过 Input.GetButtonDown("Jump") 检测跳跃按键,并使用物理公式计算跳跃速度。
  6. 重力:通过持续减少 velocity.y 模拟重力,并使角色下落。

示例2:使用鼠标控制角色视角

public class MouseLook : MonoBehaviour
{
    public float mouseSensitivity = 100f; // 鼠标灵敏度
    public Transform playerBody; // 角色的 Transform

    private float xRotation = 0f;

    void Start()
    {
        // 锁定鼠标,使其不可见并保持在屏幕中央
        Cursor.lockState = CursorLockMode.Locked;
    }

    void Update()
    {
        // 获取鼠标移动输入
        float mouseX = Input.GetAxis("Mouse X") * mouseSensitivity * Time.deltaTime;
        float mouseY = Input.GetAxis("Mouse Y") * mouseSensitivity * Time.deltaTime;

        // 计算视角上下旋转,限制最大和最小角度
        xRotation -= mouseY;
        xRotation = Mathf.Clamp(xRotation, -90f, 90f);

        // 旋转摄像机的视角
        transform.localRotation = Quaternion.Euler(xRotation, 0f, 0f);

        // 控制角色左右旋转
        playerBody.Rotate(Vector3.up * mouseX);
    }
}

在这个例子中,MouseLook 脚本用于处理摄像机的旋转。它允许玩家通过鼠标控制视角,角色则会根据鼠标的左右移动进行旋转。

  • Cursor.lockState = CursorLockMode.Locked:锁定鼠标位置,使其保持在屏幕中央。
  • playerBody.Rotate(Vector3.up * mouseX):通过旋转角色的 Y 轴来实现左右旋转。

标题5

💬 总结

Unity的Character Controller组件为开发者提供了一种简单而有效的方式来实现角色的移动和碰撞处理。通过掌握这个组件的使用,你将能够为你的游戏角色增添更多的动态和真实感。


标题6

📒 参考文献

这篇博客为你提供了一个简单的角色控制系统,包括基本的移动、跳跃和摄像机视角控制。希望这些内容能帮助你在开发 3D 游戏时轻松实现角色控制。如果你有任何问题或进一步的需求,欢迎留言讨论!


TheEnd


跳跃

📂 Unity 开发资源汇总 | 插件 | 模型 | 源码

💓 欢迎访问 Unity 打怪升级大本营

🍉🍉🍉 如果觉得这篇文对你有帮助的话,请点个赞👍、收藏⭐️下吧,非常感谢! 💕💕💕
关注我

博主头像
【博主简介】:10年以上软件开发经验,精通 C语言C++C#Java 等开发语言,开发过大型 Android 项目,现主要自主开发经营 休闲益智类小游戏

【粉丝福利】:博主收藏了大量游戏开发资源和素材。这些资源经过博主多年整理沉淀,现筛选一批精品资源,分享给大家学习研究。

Unity打怪军团 诚邀天下勇士加入 Unity学习互助小组 有意进群的同学联系我,互3互推也请联系我…
联系我

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Unity打怪升级

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值