Unity FindGameObjectsWithTag(" taghere")返回重复项

时间:2017-10-03 10:26:20

标签: c# unity3d

我正在使用FindGameObjectsWithTag(" car")我有3个标签" car"。

该方法返回3个以上的对象,通常返回4个对象,其中1个是重复的。

我根本无法理解。

任何建议都非常感谢。

2 个答案:

答案 0 :(得分:2)

  

该方法返回3个以上的对象,通常返回4个对象   其中一个是副本。

FindGameObjectsWithTag函数返回带有指定标记的GameObjects。不,它不能返回重复。

4 有理由认为事情不能正常运作:

1 。您在场景中有一个带有该标记的重复对象,因此它返回的对象超过3个。此副本可能隐藏或伪装成另一个对象的子节点。如果是,请删除标签。

2 。您错误地将另一个GameObject的标记更改为" car"现在这个功能正在寻找它。如果是,请删除标签。

3 。您正在使用" car"来实例化其中一个GameObjects。在运行时标记,此功能可以找到它。

<强> 4 即可。您将FindGameObjectsWithTag("car")放入脚本中,然后将该脚本附加到多个对象上。这很棘手。执行此操作时,如果使用Debug.Log进行查看,则会看到相同的对象两次。确保这不是您所看到的效果。如果是这种情况,请确保具有FindGameObjectsWithTag("car")代码的脚本仅附加到一个GameObject。

您可以使用Debug.Log及其第二个参数来查明问题是#1,#2和#3。

请务必删除您的其他Debug.Log代码,然后将以下脚本附加到一个空 GameObject:

public class YourScript: MonoBehaviour
{
    void Start()
    {
        GameObject[] obj = GameObject.FindGameObjectsWithTag("car");
        Debug.Log("Length: " + obj.Length);

        for (int i = 0; i < obj.Length; i++)
        {
            Debug.Log(obj[i].name, obj[i]);
        }
    }
}

点击&#34;播放&#34;然后单击控制台选项卡中的每个日志,如下图所示,它将突出显示 Hierarchy 中返回的每个GameObject FindGameObjectsWithTag("car")。您可以使用它来发现隐藏的GameObjects错误地给出了&#34; car&#34;标记然后删除标记。

enter image description here

如果问题是#4,您可以使用下面的图片找到多个脚本并将其删除:

enter image description here

答案 1 :(得分:0)

我已使用以下代码解决了这个问题;

foreach(Transform gObject in GetComponentsInChildren<Transform>()){
   if(gObject.tag == "car")
   {
      modelsList.Add(gObject.gameObject);
   }
}