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

Unity:能否从OnTriggerEnter调用Game Event?调用失败求助

问题排查与解决方案

核心问题:缺少单例实例定义

你代码里调用了GameEvents.current.CheckpointReached(this),但GameEvents类并未定义current这个单例实例,导致current为null,方法根本没有被执行。这是导致事件无法触发的最直接原因。

修正步骤

  1. 给GameEvents添加单例实现,确保场景中只有一个全局可用的实例:
public class GameEvents : MonoBehaviour
{
    // 全局单例实例
    public static GameEvents current;

    public event Action<Checkpoint> OnCheckpointReached;

    void Awake()
    {
        // 保证场景中仅存在一个GameEvents实例
        if (current == null)
            current = this;
        else
            Destroy(gameObject);
    }

    public void CheckpointReached(Checkpoint checkpoint)
    {
        if (OnCheckpointReached != null)
        {
            Debug.Log("Checkpoint reached!");
            OnCheckpointReached(checkpoint);
        }
    }
}
  1. 在场景中创建一个GameObject(比如命名为GameEventManager),将修改后的GameEvents脚本挂载上去,确保场景中只有这一个实例。

额外排查点(若单例修正后仍有问题)

  • 确认订阅OnCheckpointReached事件的代码已正确完成订阅,示例如下:
    void Start()
    {
        GameEvents.current.OnCheckpointReached += HandleCheckpointTriggered;
    }
    
    void HandleCheckpointTriggered(Checkpoint checkpoint)
    {
        // 这里编写触发checkpoint后的逻辑
    }
    
    void OnDestroy()
    {
        // 记得取消订阅,避免内存泄漏
        GameEvents.current.OnCheckpointReached -= HandleCheckpointTriggered;
    }
    
  • 检查Checkpoint类是否存在编译错误,确保其能被正常引用。
  • 再次确认碰撞器配置:
    • 玩家和Checkpoint的碰撞器都勾选了Is Trigger
    • 玩家对象带有Rigidbody组件(静态触发器之间不会触发OnTriggerEnter,必须有一个对象带有Rigidbody)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 21:55:42