En mi OnTriggerEnter2D() tengo una condición if que verifica si el colisionador correcto está colisionando con mi otro Gameobject. Para un Ejemplo simple: Hay un León y un Elefante con la Etiqueta "Animal" con el mismo script que maneja sus variables. Según cuál de los dos animales ingrese al otro Colisionador, quiero ejecutar un código específico. Traté de darles a ambos animales una cadena que indica de qué tipo son, como en Lion is a Lion. Pero eso no funcionó.
public void OnTriggerEnter2D(Collider2D a_collider2D) { if (a_collider2D.gameObject.CompareTag("Animal") && m_sAnimalStat.m_sAnimalType.Equals("Lion")) {//code here if its a Lion}¿Hay otra forma de diferenciar los colisionadores? Ponerlos en diferentes capas tampoco funcionó. OnTriggerEnter2D está en el otro Gameobject hacia donde caminan los animales. El AnimaStatManager está en Lion Prefab que tiene la etiqueta "Animal". Como dije, maneja varias variables para todos mis animales. Como m_sAnimalType. m_aAnimalStat=GameObject.FindGameObjectWithTag("Animal").GetComponent(); --> solo para poder acceder a lo que necesito de ese script.
Los objetos de Unity se definen por composición . Esto significa que un objeto se define por sus componentes . Entonces, en mi opinión, un mejor enfoque podría ser tener un componente "Lion" en un objeto Lion, excepto que tenga una razón específica para no hacerlo.
Tomas tu class Animal : MonoBehaviour y creas una clase secundaria para cada especie: class Lion : Animal , class Elephant : Animal , etc.
Entonces, simplemente puedes hacer:
public void OnTriggerEnter2D(Collider2D a_collider2D) { if (a_collider2D.GetComponent<Lion>() != null) { // Lion } else if (a_collider2D.GetComponent<Elephant>() != null) { // Elephant } else if (a_collider2D.GetComponent<...>() != null) { // ... } }