区分具有相同标签的Gameobject碰撞器

Differentiate Gameobject colliders with the same tag

在我的 OnTriggerEnter2D() 中,我有一个 if 条件,用于检查正确的对撞机是否与我的其他游戏对象发生碰撞。举一个简单的例子:有一头狮子和一头大象,标签为“动物”,它们使用相同的脚本来管理它们的变量。基于两个 Animals 中的哪一个进入另一个 Collider 我想执行特定的代码。 我试着给这两种动物一个字符串,告诉他们它们是哪种类型,就像 Lion 是 Lion 一样。但是那没有用。

public void OnTriggerEnter2D(Collider2D a_collider2D)
{

    if (a_collider2D.gameObject.CompareTag("Animal") && m_sAnimalStat.m_sAnimalType.Equals("Lion")) 
    {//code here if its a Lion}

还有其他方法可以区分对撞机吗?把它们放在不同的层上也没有用。 OnTriggerEnter2D 在动物走向的另一个游戏对象上。 AnimaStatManager 位于带有标签“Animal”的 Lion Prefab 上。如前所述,它为我所有的动物管理各种变量。喜欢m_sAnimalType。 m_aAnimalStat=GameObject.FindGameObjectWithTag("动物").GetComponent(); --> 这样我就可以从该脚本访问我需要的内容。

Unity object 由 组合 定义。这意味着 object 由它的 组件 定义。 因此,在我看来,更好的方法可能是在 Lion object 上添加一个“Lion”组件,除非您有特定的理由不这样做。

你用你的 class Animal : MonoBehaviour 为每个物种创建 child class:class Lion : Animalclass Elephant : Animal

然后,你可以简单地做:

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) {
        // ...
    }
}