You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在无限跑酷游戏中用CharacterController实现玩家左右移动与跳跃

无限跑酷游戏玩家移动(左右+跳跃)实现方案

原脚本未处理左右输入,且重力、跳跃逻辑不够严谨,以下是基于CharacterController的正确实现,可解决你提到的各类问题:

using UnityEngine;

public class PlayerMove : MonoBehaviour
{
    [Header("移动参数")]
    public float forwardSpeed = 8f; // 跑酷前进速度
    public float horizontalSpeed = 5f; // 左右移动速度
    public float jumpHeight = 2f; // 跳跃高度
    public float gravity = 9.81f; // 接近真实物理的重力值

    private CharacterController _controller;
    private Vector3 _moveDirection;
    private float _yVelocity;

    private void Awake()
    {
        _controller = GetComponent<CharacterController>();
    }

    private void Update()
    {
        HandleMovement();
        HandleJumpAndGravity();
        
        // 应用移动
        _controller.Move(_moveDirection * Time.deltaTime);
    }

    private void HandleMovement()
    {
        // 获取左右输入(支持A/D键或左右箭头)
        float horizontalInput = Input.GetAxis("Horizontal");
        
        // 固定Z轴前进,X轴处理左右移动
        _moveDirection = new Vector3(horizontalInput * horizontalSpeed, 0, forwardSpeed);
        // 保证移动方向与玩家朝向一致,适配场景旋转
        _moveDirection = transform.TransformDirection(_moveDirection);
    }

    private void HandleJumpAndGravity()
    {
        if (_controller.isGrounded)
        {
            // 落地时重置垂直速度,避免异常下落
            _yVelocity = -0.5f;
            
            // 触发跳跃
            if (Input.GetKeyDown(KeyCode.Space))
            {
                // 用物理公式计算初始跳跃速度,保证手感稳定:v = sqrt(2 * g * h)
                _yVelocity = Mathf.Sqrt(jumpHeight * 2 * gravity);
            }
        }
        else
        {
            // 空中持续叠加重力,保证自然下落
            _yVelocity -= gravity * Time.deltaTime;
        }

        _moveDirection.y = _yVelocity;
    }
}

关键优化说明

  • 左右移动:通过Input.GetAxis("Horizontal")获取标准化输入,适配多种设备,同时控制移动速度避免失控
  • 跳跃逻辑:用物理公式计算初始跳跃速度,替代硬编码数值,保证跳跃手感一致;落地时重置垂直速度防止异常
  • 重力处理:空中持续叠加重力,且基于Time.deltaTime保证帧率无关的自然下落
  • 方向适配:通过TransformDirection确保移动方向与玩家朝向一致,适配场景旋转需求

使用注意事项

  1. 确保玩家对象已添加CharacterController组件
  2. 可在Inspector面板调整参数(如forwardSpeed、horizontalSpeed)适配游戏手感
  3. 若需限制玩家跑出赛道,可在HandleMovement中添加X轴边界判断

内容的提问来源于stack exchange,提问作者Code Wire

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 12:10:23