如何找到场景中的所有 Cube 游戏对象?
How to find all Cube game Object in the scene?
我正在寻找一种方法来找到场景中的所有 CubeGameObject。我正在尝试这样做:
Cube[] ballsUp = FindObjectsOfType (typeof(Cube)) as Cube[];
但立方体显然不是游戏对象类型。
我想我需要使用与 PrimitiveType 相关的东西,但可以弄清楚它是什么以及如何使用它...
谢谢
您可以尝试使用脚本。假设您的 GameObjects 有一个脚本 MyScript
,那么您可以 FindObjectsofType
GameObject 和 GetComponent
Myscript。
希望这对您有所帮助。虽然,我知道这不是你想要的答案,但作为最后的手段,这绝对是一个值得尝试的想法:)
你可以试试这个。如果您使用统一的立方体基元,则网格应称为 "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"
获取它们
然后 Unity 推荐的方法是创建一个标签,然后使用 GameObject.FindGameObjectsWithTag
找到所有标签。 GameObject.FindGameObjectsWithTag
returns 此标记中的对象数组。
例如,创建一个名为 "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>();
}
你的Cube是原始类型。使用 FindObjectsOfType 无法找到 Primitive 类型的对象。
有很多方法可以解决上述问题。最简单的是使用标签。
当你实例化你的立方体对象时,你可以使用标签 "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);
}
}
}
我正在寻找一种方法来找到场景中的所有 CubeGameObject。我正在尝试这样做:
Cube[] ballsUp = FindObjectsOfType (typeof(Cube)) as Cube[];
但立方体显然不是游戏对象类型。
我想我需要使用与 PrimitiveType 相关的东西,但可以弄清楚它是什么以及如何使用它...
谢谢
您可以尝试使用脚本。假设您的 GameObjects 有一个脚本 MyScript
,那么您可以 FindObjectsofType
GameObject 和 GetComponent
Myscript。
希望这对您有所帮助。虽然,我知道这不是你想要的答案,但作为最后的手段,这绝对是一个值得尝试的想法:)
你可以试试这个。如果您使用统一的立方体基元,则网格应称为 "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"
获取它们然后 Unity 推荐的方法是创建一个标签,然后使用 GameObject.FindGameObjectsWithTag
找到所有标签。 GameObject.FindGameObjectsWithTag
returns 此标记中的对象数组。
例如,创建一个名为 "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>();
}
你的Cube是原始类型。使用 FindObjectsOfType 无法找到 Primitive 类型的对象。 有很多方法可以解决上述问题。最简单的是使用标签。 当你实例化你的立方体对象时,你可以使用标签 "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);
}
}
}