You need to enable JavaScript to run this app. Unity角色移动脚本重力不生效、跳跃功能无法使用问题求助
优惠活动
大模型
产品
解决方案
定价
更多

Unity角色移动脚本重力不生效、跳跃功能无法使用问题求助

重力与跳跃失效原因

1. Y轴速度被每帧强制重置(核心故障)

你当前代码每帧执行时,都会通过Vector3 moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"))直接把Y轴速度设为0,上一帧累积的重力下落速度、跳跃产生的向上速度会被完全清空。
重力的生效逻辑是逐帧累积Y轴向下的速度,你每帧重置Y轴为0后,仅在当前帧减去gravity * Time.deltaTime,最终传入controller.Move的Y轴位移为(-gravity * Time.deltaTime) * Time.deltaTime,每帧下落距离几乎可以忽略,就会出现悬浮效果。同时跳跃给的Y轴速度也会在次帧被重置,根本不会产生向上的位移。

2. 地面检测(isGrounded)失效

如果CharacterController组件参数设置错误,isGrounded会永远返回false,跳跃逻辑永远不会触发。

修复后的代码
using UnityEngine;

public class SimpleMovement : MonoBehaviour
{
    public float airSpeedCoefficient = 0.5f;
    public float speed = 6.0F;
    public float jumpSpeed = 8.0F;
    public float gravity = 20.0F;
    public CharacterController controller;

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

    void Update()
    {
        // 处理水平移动逻辑
        Vector3 moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
        moveDirection = transform.TransformDirection(moveDirection);
        moveDirection *= speed;

        // 保留上一帧的Y轴速度,不做重置
        moveDirection.y = controller.velocity.y;

        if (controller.isGrounded)
        {
            // 落地时给一个微小的向下速度,保证地面检测持续生效
            moveDirection.y = -0.1f;
            // 跳跃检测改为GetButtonDown,避免按住跳跃键反复触发
            if (Input.GetButtonDown("Jump"))
                moveDirection.y = jumpSpeed;
        }

        // 逐帧累积重力
        moveDirection.y -= gravity * Time.deltaTime;
        // 执行移动
        controller.Move(moveDirection * Time.deltaTime);
    }
}
额外检查项
  • 确认角色对象上挂载了CharacterController组件,且组件的Height、Radius、Center参数和角色模型碰撞体积匹配
  • 确认CharacterController的Skin Width参数设置合理,建议为Height的1/10左右,参数过小会导致地面检测失效
  • 确认地面对象挂载了非触发(Is Trigger 未勾选)的碰撞体组件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 08:06:00