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

Unity开发马里奥卡丁车同人游戏:碰撞检测失效求助

马里奥卡丁车同人游戏圈数系统碰撞检测问题解决

代码里的直接错误

你代码里的条件判断用了赋值符号 = 而非相等判断符号 ==:if (checkpointHit1 = false) 会直接把checkpointHit1强制设为false,导致内部逻辑永远不会执行。应该改成 if (checkpointHit1 == false),或者更简洁的 if (!checkpointHit1)。

碰撞检测失效的常见排查点

  • 玩家车辆对象必须带有Rigidbody组件,且不能勾选Is Kinematic(如果用CharacterController则例外),触发器需要依赖刚体才能触发事件。
  • 检查 checkpoint 对象的Collider组件是否勾选了Is Trigger,只有触发器才能触发OnTriggerEnter方法。
  • 确认checkpoint对象的标签确实是CP1,标签区分大小写,别出现拼写错误。
  • 确保脚本挂载在玩家车辆对象上,而非checkpoint对象。
  • 检查两个对象的Layer设置,在Edit > Project Settings > Physics中确认对应Layer的碰撞关系是允许交互的。

修正后的代码示例

private bool checkpointHit1 = false; // 记得初始化变量

private void OnTriggerEnter(Collider collision)
{
    if (!checkpointHit1)
    {
        // 用CompareTag比直接判断标签更安全,可避免空引用报错
        if (collision.gameObject.CompareTag("CP1")) 
        {
            checkpointHit1 = true;
            Debug.Log("CP1 checkpoint hit!"); // 添加日志方便调试
        }
    }
}

调试小技巧

可以在OnTriggerEnter方法开头添加Debug.Log(collision.gameObject.name);,查看是否能检测到碰撞,快速定位是触发逻辑失效还是标签判断出错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 02:46:07