Если я правильно понял, то у вас на одном объекте есть коллайдер и два скрипта атакующий/оборонительный и вы хотите при столкновении коллайдера вызывать метод атаки или обороны в зависимости от состояния объекта (атакует или обороняется?). Тогда может завести enum с двумя этими состояниями, а при столкновении коллайдера, исходя из этого состояния выполнять нужный метод.
Используется csharp
using UnityEngine;
public class Unit : MonoBehaviour
{
public enum UnitState
{
Attack,
Defense
}
public UnitState currentState; // виден в инспекторе
private void OnCollisionEnter(Collision collision)
{
// в зависимости от состояния, выполняем нужный метод.
// в метод передаётся текущая коллизия, но это не обязательно, вдруг вам она не нужна.
if (currentState == UnitState.Attack)
{
attackAction(collision);
}
else if (currentState == UnitState.Defense)
{
defenseAction(collision);
}
}
private void attackAction(Collision collision)
{
// делаем что-то в состоянии атаки
}
private void defenseAction(Collision collision)
{
// делаем что-то в состоянии защиты
}
}
А чтобы коллизия не срабатывала после уничтожении юнита (если вдруг такое получается, хотя странно), то ставьте ему какое нибудь свойство, например isDestoy=true, а в методах коллизии, просто проверяйте это свойство и выполняйте return в самом начале, если оно true.
Используется csharp
private void OnCollisionEnter(Collision collision)
{
if (isDestroy) return;
// остальной код
}