我正在使用FindGameObjectsWithTag(" car")我有3个标签" car"。
该方法返回3个以上的对象,通常返回4个对象,其中1个是重复的。
我根本无法理解。
任何建议都非常感谢。
答案 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;标记然后删除标记。
如果问题是#4,您可以使用下面的图片找到多个脚本并将其删除:
答案 1 :(得分:0)
我已使用以下代码解决了这个问题;
foreach(Transform gObject in GetComponentsInChildren<Transform>()){
if(gObject.tag == "car")
{
modelsList.Add(gObject.gameObject);
}
}