如何使用LINQ在GameObject[]数组中查找指定类型的元素?
用LINQ改写Unity场景根对象的组件查找
首先,确保脚本顶部引入System.Linq命名空间,否则LINQ方法无法使用:
using System.Linq;
然后改写OnSceneLoaded方法:
private void OnSceneLoaded(Scene scene, LoadSceneMode loadSceneMode) { if (scene.buildIndex == 2) { var sceneObjects = scene.GetRootGameObjects(); // 和原代码行为完全一致:遍历所有根对象,最终保留最后一个匹配的组件 sumoUIManager = sceneObjects .Select(obj => obj.GetComponent<SumoUIManager>()) .LastOrDefault(comp => comp != null); // 若确定场景中仅存在一个SumoUIManager,用SingleOrDefault更严谨(多个匹配时会抛出异常,提前发现逻辑问题) // sumoUIManager = sceneObjects // .Select(obj => obj.GetComponent<SumoUIManager>()) // .SingleOrDefault(comp => comp != null); } }
代码说明
Select(obj => obj.GetComponent<SumoUIManager>()):将每个根GameObject转换为对应的SumoUIManager组件(无组件则返回null)LastOrDefault(comp => comp != null):筛选出非null的组件,取最后一个结果,和原foreach遍历所有对象、最后赋值的逻辑完全对齐
内容的提问来源于stack exchange,提问作者Hatemsla
相关产品推荐
相关产品推荐

