我希望找到一种方法来查找场景中的所有CubeGameObject。我正在尝试做到这一点:
Cube[] ballsUp = FindObjectsOfType (typeof(Cube)) as Cube[];
但是方块显然不是游戏对象类型。
我认为我需要使用与PrimitiveType相关的东西,但是不知道如何使用它...
谢谢
Cube[] ballsUp = FindObjectsOfType (typeof(Cube)) as Cube[];
但是方块显然不是游戏对象类型。
我认为我需要使用与PrimitiveType相关的东西,但是不知道如何使用它...
谢谢
您的 Cube 是原始类型。原始类型对象无法使用 FindObjectsOfType 找到。 有很多方法可以解决上述问题。最简单的方法是使用标签。 当您实例化 Cube 对象时,可以使用标签 "Cube"。
GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
cube.tag = "Cube";
然后,您可以使用cube标签获取场景中所有的立方体对象:
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);
}
}
}
你可以尝试使用脚本。假设你的游戏对象有一个名为MyScript
的脚本,那么你可以使用FindObjectsofType
GameObject和GetComponent
Myscript。
希望这能帮到你。虽然我知道这不是你想要的答案,但作为最后的尝试,这绝对是值得一试的想法 :)
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”获取它们。
GameObject.FindGameObjectsWithTag
来查找所有对象。 GameObject.FindGameObjectsWithTag
返回此标签中的对象数组。GameObject[] cubes = GameObject.FindGameObjectsWithTag ("cubeTags");
Cube[] ballsUp = new Cube[cubes.Length];
for(int i=0; i<cubes.Length; i++){
ballsUp = cubes[i].GetComponent<Cube>();
}