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

Unity3d 如何在场景中找到所有立方体游戏对象?,unity3d,gameobject,Unity3d,Gameobject,我正在寻找一种找到场景中所有CubeGameObject的方法。我正在尝试这样做: Cube[] ballsUp = FindObjectsOfType (typeof(Cube)) as Cube[]; 但立方体显然不是游戏对象类型 我想我需要使用一些与PrimitiveType相关的东西,但我可以找出什么和如何使用它 谢谢您可以尝试使用脚本。假设您的游戏对象有一个脚本MyScript,那么您可以FindObjectsofTypeGameObject和GetComponentMyScript

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

Cube[] ballsUp = FindObjectsOfType (typeof(Cube)) as Cube[];
但立方体显然不是游戏对象类型

我想我需要使用一些与PrimitiveType相关的东西,但我可以找出什么和如何使用它


谢谢

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


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

你可以试试这个。如果您使用的是unity的立方体基本体,则在运行“立方体实例”时,网格应称为“立方体”

var gameOjects=GameObject.FindObjectsOfType();
foreach(游戏项目中的var游戏项目)
{
var meshFilter=gameOject.GetComponent();
if(meshFilter!=null&&meshFilter.mesh.name==“多维数据集实例”)
Debug.Log(gameOject.name);
}
这不是很优雅或健壮


更合适的方法是标记所有多维数据集,并通过“FindGameObjectsSwithTag”获取它们。

Unity的建议方法是创建一个标记,然后使用
GameObject.FindGameObjectsSwithTag
查找所有多维数据集<代码>游戏对象。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>();
}
GameObject[]cubes=GameObject.FindGameObjectsWithTag(“cubeTags”);
多维数据集[]ballsUp=新多维数据集[cubes.Length];

对于(int i=0;i,您的多维数据集是基元类型。使用FindObjectsOfType无法找到基元类型的对象。 解决上述问题的方法有很多,最简单的方法是使用标签。 实例化多维数据集对象时,可以使用标记“cube”

然后,可以使用获取场景中具有立方体标记的所有立方体对象

GameObject[] arrayofcubes = GameObject.FindGameObjectsWithTag("Cube");
这将给出场景中所有游戏对象立方体的数组

FindObjectsOfType可用于查找带有附加类别而非原始类型的游戏对象

另一种方法是使用网格过滤器查找所有对象,并在网格过滤器阵列中搜索所需的基本体名称

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);                
        }           
    }       
}

我已经这样做了,但有点混乱,所以我正在寻找另一种解决方案:)。无论如何谢谢谢谢,不幸的是我的立方体已经用不同的标签标记了,但我认为这是最好的方法:s.Oops。当我写我的东西时,有人说了标签的事。无论哪种方式,脚本都是为将来可能需要它的其他人准备的
GameObject[] arrayofcubes = GameObject.FindGameObjectsWithTag("Cube");
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);                
        }           
    }       
}