如何在场景中找到所有的立方体游戏对象?

3
我希望找到一种方法来查找场景中的所有CubeGameObject。我正在尝试做到这一点:
Cube[] ballsUp = FindObjectsOfType (typeof(Cube)) as Cube[];

但是方块显然不是游戏对象类型。

我认为我需要使用与PrimitiveType相关的东西,但是不知道如何使用它...

谢谢

4个回答

2

您的 Cube 是原始类型。原始类型对象无法使用 FindObjectsOfType 找到。 有很多方法可以解决上述问题。最简单的方法是使用标签。 当您实例化 Cube 对象时,可以使用标签 "Cube"。

GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
    cube.tag = "Cube";

然后,您可以使用cube标签获取场景中所有的立方体对象:

GameObject[] arrayofcubes = GameObject.FindGameObjectsWithTag("Cube");

这将提供场景中所有GameObject立方体的数组。
可以使用“FindObjectsOfType”找到附有类和非基本类型的游戏对象。
另一种方法是查找所有具有MeshFilters的对象并在网格过滤器数组中搜索所需的原始名称。
string[] meshNames = new string[5] {"Cube", "Sphere", "Capsule", "Cylinder", "Plane"};
MeshFilter[] allMeshFilters = FindObjectsOfType(typeof(MeshFilter)) as MeshFilter[];
foreach(MeshFilter thisMeshFilter in allMeshFilters)
{       
    foreach(string primName in meshNames)
    {           
        if (primName == thisMeshFilter.sharedMesh.name)
        {
            Debug.Log("Found a primitive of type: " + primName);                
        }           
    }       
}

通过它们的基元类型获取所有对象 (C#)


0

你可以尝试使用脚本。假设你的游戏对象有一个名为MyScript的脚本,那么你可以使用FindObjectsofType GameObject和GetComponent Myscript。

希望这能帮到你。虽然我知道这不是你想要的答案,但作为最后的尝试,这绝对是值得一试的想法 :)


我已经做过这个,但有点乱,所以我正在寻找另一种解决方案:)。无论如何还是谢谢。 - Helixb

0
你可以尝试这个。如果你正在使用Unity的立方体原始模型,那么网格应该被称为“Cube”,在运行时则是“Cube Instance”。
       var gameOjects =  GameObject.FindObjectsOfType<GameObject>();
        foreach (var gameOject in gameOjects)
        {
            var meshFilter = gameOject.GetComponent<MeshFilter>();
            if (meshFilter != null && meshFilter.mesh.name == "Cube Instance")
                Debug.Log(gameOject.name); 
        }

虽然这种方法不太优雅也不够健壮。

更合适的方式是标记所有的立方体,并通过“FindGameObjectsWithTag”获取它们。


谢谢,不幸的是我的立方体已经被标记为不同的标签,但我认为这是最好的方法 :s。 - Helixb

0
然后,Unity 推荐的方法是创建一个标签,然后使用 GameObject.FindGameObjectsWithTag 来查找所有对象。 GameObject.FindGameObjectsWithTag 返回此标签中的对象数组。
例如,创建一个名为 "cubeTags" 的标签,然后转到每个立方体并将标签更改为 cubeTags。当您想要查找所有立方体时,只需执行以下操作:
GameObject[] cubes = GameObject.FindGameObjectsWithTag ("cubeTags");
Cube[] ballsUp = new Cube[cubes.Length];
for(int i=0; i<cubes.Length; i++){
ballsUp = cubes[i].GetComponent<Cube>();
}

哎呀,当我在写我的时候,有人说了标签的事情。无论如何,这个脚本在这里供将来可能需要它的其他人使用。 - Programmer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接