Unity:能否从OnTriggerEnter调用Game Event?调用失败求助
问题排查与解决方案
核心问题:缺少单例实例定义
你代码里调用了GameEvents.current.CheckpointReached(this),但GameEvents类并未定义current这个单例实例,导致current为null,方法根本没有被执行。这是导致事件无法触发的最直接原因。
修正步骤
- 给
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); } } }
- 在场景中创建一个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)
- 玩家和Checkpoint的碰撞器都勾选了
内容的提问来源于stack exchange,提问作者dekogames
相关产品推荐
相关产品推荐

