如何在场景中找到所有 Cube 游戏对象?
Posted
技术标签:
【中文标题】如何在场景中找到所有 Cube 游戏对象?【英文标题】:How to find all Cube game Object in the scene? 【发布时间】:2015-08-01 09:35:45 【问题描述】:我正在寻找一种方法来找到场景中的所有 CubeGameObject。我正在尝试这样做:
Cube[] ballsUp = FindObjectsOfType (typeof(Cube)) as Cube[];
但立方体显然不是游戏对象类型。
我认为我需要使用与 PrimitiveType 相关的东西,但可以弄清楚它是什么以及如何使用它......
谢谢
【问题讨论】:
【参考方案1】:您的 Cube 是原始类型。并且使用 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#)
【讨论】:
【参考方案2】:您可以尝试使用脚本。假设你的游戏对象有一个脚本MyScript
,那么你可以FindObjectsofType
GameObject 和GetComponent
Myscript。
希望这会有所帮助。虽然,我知道这不是您想要的答案,但这绝对是一个值得尝试作为最后手段的想法:)
【讨论】:
我已经这样做了,但是有点乱,所以我正在寻找另一个解决方案:)。还是谢谢【参考方案3】:你可以试试这个。如果您使用统一的立方体原语,则网格应称为“立方体”并在运行“立方体实例”时。
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);
tough 这不是很优雅或健壮。
更合适的方法是标记所有立方体并通过“FindGameObjectsWithTag”获取它们
【讨论】:
谢谢,不幸的是我的立方体已经被标记了不同的标签,但我认为这是最好的方法:s。【参考方案4】: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>();
【讨论】:
糟糕。有人在我写我的时候说了标签的事情。无论哪种方式,该脚本都在这里供将来可能需要它的其他人使用以上是关于如何在场景中找到所有 Cube 游戏对象?的主要内容,如果未能解决你的问题,请参考以下文章
Unity3D:将所有游戏对象转换为相同大小,而不管其比例如何
如何在 Babylon JS 游戏引擎中处理从 glb 文件加载的对象
Invoke-InvokeRepeating/短暂延迟后调用一次 或重复调用携程之外