Вместо создания сценария для каждого, могу ли я создать один GameObject и прикрепить сценарий для управления всем событием триггера?
Для вызова OnTriggerEnter2D
сценария, которыйсодержит, он должен быть присоединен к тому GameObject, который будет вовлечен в столкновение.Если этого не сделать, он не будет вызван.
Если вам нужен общий сценарий для обработки всех обнаружений столкновений, вам придется использовать событие и делегировать для этого.Создайте delegate
с именем CollisionAction
, а затем событие из этого delegate
с именем OnTriggered
.Когда вызывается OnTriggerEnter2D
, вызывается это событие OnTriggered
. Прикрепите его ко всем объектам GameObject, на которых вы хотите обнаружить столкновение.
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
. Когда в скрипте CollisionCallback
вызывается OnTriggerEnter2D
, зарегистрированная функция в MainScript
будет называться .Присоединить к пустому GameObject:
public class MainScript : MonoBehaviour
{
void OnEnable()
{
//Register to OnTriggered event
CollisionCallback.OnTriggered += TriggerDetected;
}
void OnDisable()
{
//Un-Register to OnTriggered event
CollisionCallback.OnTriggered -= TriggerDetected;
}
//This is invoked when trigger happens
void TriggerDetected(Collider2D collision)
{
Debug.Log("Trigger happened with: " + collision.name);
}
}