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

Unity 3D实现地面接触时跳跃:OnCollisionEnter调用Jump函数无效问题求助

嘿,我来帮你捋捋这个问题!你现在的核心问题是逻辑触发时机搞反了——OnCollisionEnter只会在玩家刚接触地面的那一瞬间触发一次,这时候你直接调用jump(),但玩家这时候大概率没按空格键啊!所以哪怕Debug.Log能正常打印,跳跃动作也不会按你预期的触发,因为触发时机完全不对。

问题拆解&解决方案

1. 修正核心逻辑

正确的跳跃逻辑应该是:

  • 用一个布尔变量标记玩家是否处于地面(比如isGrounded)
  • 接触地面时标记为true,离开地面时标记为false
  • 在每一帧检测空格键输入,只有当玩家按空格且处于地面时,才调用跳跃函数

2. 可能的辅助检查点

  • 确认地面的Collider没有勾选Is Trigger(如果勾了,OnCollisionEnter不会触发,得用OnTriggerEnter,不过你能打印日志,这点大概率没问题)
  • 玩家物体必须带有Rigidbody组件,且跳跃函数里要通过Rigidbody施加力(别直接改transform.position,会忽略物理规则导致碰撞检测异常)

示例代码

public class PlayerJump : MonoBehaviour
{
    public Rigidbody playerRb;
    public float jumpForce = 6f;
    private bool isGrounded = false;

    private void Start()
    {
        // 自动获取Rigidbody组件,也可以在Inspector面板手动赋值
        if (!playerRb) playerRb = GetComponent<Rigidbody>();
    }

    private void Update()
    {
        // 检测空格键按下,同时确保玩家在地面上
        if (Input.GetKeyDown(KeyCode.Space) && isGrounded)
        {
            Jump();
        }
    }

    private void OnCollisionEnter(Collision collision)
    {
        // 给地面设置专属Tag(比如"Ground"),避免碰到其他物体误触发
        if (collision.gameObject.CompareTag("Ground"))
        {
            isGrounded = true;
            Debug.Log("回到地面,可以跳跃了");
        }
    }

    private void OnCollisionExit(Collision collision)
    {
        if (collision.gameObject.CompareTag("Ground"))
        {
            isGrounded = false;
        }
    }

    private void Jump()
    {
        // 重置垂直方向速度,避免多次跳跃叠加导致高度异常
        playerRb.velocity = new Vector3(playerRb.velocity.x, 0f, playerRb.velocity.z);
        // 通过Rigidbody施加向上的冲量
        playerRb.AddForce(Vector3.up * jumpForce, ForceMode.Impulse);
        // 跳跃后立刻标记为非地面状态,防止按住空格连续跳
        isGrounded = false;
        Debug.Log("It's jumping");
    }
}

最后要做的小配置

记得给你的地面物体设置Tag为Ground,并且确保玩家的Rigidbody勾选了Use Gravity,玩家和地面的Collider都处于非Trigger状态。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 18:22:48