我想控制播放器和开机之间的触发。除了为每个脚本创建脚本之外,我还可以创建一个GameObject并附加一个脚本来控制所有触发事件吗?
喜欢
void OnTriggerEnter2D(Collider2D collision){
switch(collision.gameObject.tag){
case "Move+":
FindObjectOfType<CreatePlayer>().movesRemain += 5;
break;
}
}
但是,这样做时,玩家必须触发包含脚本的GameObject。
答案 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