如何在场景中找到所有Cube游戏对象?

时间:2015-05-20 08:44:25

标签: unity3d gameobject

我正在寻找一种方法来查找场景中的所有CubeGameObject。我正在尝试这样做:

vCIC1_SERIALN0_NEW

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

我想我需要使用与PrimitiveType相关的东西,但可以弄清楚它是什么以及如何使用它......

由于

4 个答案:

答案 0 :(得分:1)

你的立方体是原始类型。使用 FindObjectsOfType 无法找到原始类型对象。 解决上述问题的方法有很多种。最简单的方法是使用标签。 实例化多维数据集对象时,可以使用标记“Cube”。

GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
    cube.tag = "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);                
        }           
    }       
}

Geeting all the Object by their primitive type (C#)

答案 1 :(得分:0)

您可以尝试使用脚本。假设您的GameObjects有一个脚本MyScript,那么您可以FindObjectsofType GameObject和GetComponent Myscript。

希望这会有所帮助。虽然,我知道这不是你想要的答案,但绝对值得尝试作为最后的手段:)

答案 2 :(得分:0)

你可以试试这个。如果你使用的是统一体的立方体原则,那么网格应该被称为“立方体”并且在运行“立方体实例”时。

       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”获取它们

答案 3 :(得分: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>();
}