从一个脚本或未附加到碰撞GameObject的脚本中检测/处理所有碰撞

时间:2018-09-13 16:54:15

标签: c# unity3d

我想控制播放器和开机之间的触发。除了为每个脚本创建脚本之外,我还可以创建一个GameObject并附加一个脚本来控制所有触发事件吗?

喜欢

void OnTriggerEnter2D(Collider2D collision){
    switch(collision.gameObject.tag){
        case "Move+":
            FindObjectOfType<CreatePlayer>().movesRemain += 5;
            break;
    }
}

但是,这样做时,玩家必须触发包含脚本的GameObject。

1 个答案:

答案 0 :(得分:0)

  

我可以为每个游戏对象创建一个脚本,而不是为每个脚本创建一个脚本   并附加一个脚本来控制所有触发事件?

要调用OnTriggerEnter2D,包含它的脚本必须附加到将在碰撞中涉及的GameObject。如果不这样做,它将不会被调用。


如果您需要通用脚本来处理所有冲突检测,则必须使用事件和委托来执行此操作。创建一个名为delegate的{​​{1}},然后创建一个名为CollisionAction的事件。调用delegate时,调用该OnTriggered事件。 将其附加到要在其上检测到碰撞的所有GameObject。

OnTriggerEnter2D

现在,在要用于处理冲突的主脚本上,在OnTriggered函数中注册到public class CollisionCallback : MonoBehaviour { public delegate void CollisionAction(Collider2D collision); public static event CollisionAction OnTriggered; void OnTriggerEnter2D(Collider2D collision) { if (OnTriggered != null) OnTriggered(collision); } } 事件,然后在OnTriggered函数中取消注册。 OnEnable脚本中调用OnDisable时,将调用OnTriggerEnter2D中已注册的函数。附加到一个空的GameObject:

CollisionCallback