微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

区分具有相同标签的游戏​​对象碰撞器

如何解决区分具有相同标签的游戏​​对象碰撞器

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

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("Animal").GetComponent(); --> 这样我就可以从该脚本中访问我需要的内容

解决方法

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

您使用 class Animal : MonoBehaviour 并为每个物种创建一个子类: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) {
        // ...
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。