You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 18:40:26