Unity中如何获取包含子类实例的指定类型对象集合?
解决方案
Unity 的 FindObjectsOfType<T>() 方法本身就会返回所有T类及其派生类的活跃实例,所以你直接用原来的代码就能同时获取A、B、C的所有对象:
A[] allInstances = FindObjectsOfType<A>();
如果需要包含被禁用(activeSelf = false)的对象,可以传入第二个参数:
A[] allInstancesIncludingDisabled = FindObjectsOfType<A>(true);
补充说明
- 这个方法返回的数组里,B和C的实例会被自动向上转型为A类型,如果你需要区分具体类型,可以用
is或GetType()来判断:foreach (var instance in allInstances) { if (instance is B) Debug.Log("找到B类实例"); else if (instance is C) Debug.Log("找到C类实例"); else Debug.Log("找到A类实例"); } - 注意:
FindObjectsOfType不会返回未激活的场景对象或预制体实例(除非你用第二个参数包含禁用对象),也不会返回资源文件里的对象。
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

