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

Unity基础平台跳跃脚本Jump方法激活但无法跳跃求助

问题修复方案

1. 移除冗余变量并修正引用

你的Start方法里player = GetComponent<GameObject>();是错误写法——GetComponent<T>用于获取挂载在当前物体上的组件,而GameObject本身不是组件。完全不需要这个player变量,直接用transform.up替代player.transform.up即可。

修改后代码片段:

public class Player : MonoBehaviour
{
    new private Rigidbody rigidbody;
    [Range(1,10)]
    public float jumpHeight = 5.0f;
    private bool isOnGround;

    void Start()
    {
        rigidbody = GetComponent<Rigidbody>();
    }

2. 修正跳跃力的计算逻辑

使用ForceMode.Impulse时,不能乘以Time.deltaTime——Impulse是瞬间施加的冲量,和帧时间无关,乘了deltaTime会让力被稀释到几乎可以忽略的程度,直接导致角色跳不起来。同时可以适当调高jumpHeight数值(比如设为500),普通重力场景下需要足够大的力才能让角色产生明显跳跃动作。

修正后的jump方法:

private void jump()
{
    Debug.Log("Jump was activated");
    rigidbody.AddForce(transform.up * jumpHeight, ForceMode.Impulse);
}

3. 完善地面检测逻辑

  • 确认地面物体的标签是完全匹配的Ground(Unity标签大小写敏感);
  • 补充OnCollisionExit方法,避免某些边缘场景下isOnGround状态错误:
private void OnCollisionExit(Collision collision)
{
    if(collision.gameObject.tag.Equals("Ground"))
    {
        isOnGround = false;
    }
}
  • 初始时将isOnGround设为true,避免角色初始在地面却无法触发跳跃:
private bool isOnGround = true;

4. 检查Rigidbody组件设置

确保Player物体上的Rigidbody组件满足:

  • 勾选Use Gravity(启用重力);
  • Constraints中未锁定Y轴移动;
  • 正确挂载碰撞体组件(比如CapsuleCollider),且大小适配角色模型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 11:42:37