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

Unity 2022.1.24中GetRootGameObjects返回空数组问题求助

Unity 2022.1.24调用GetRootGameObjects返回空数组的原因排查

你的测试代码如下:

class Overlay : MonoBehaviour
{
    void OnGUI()
    {
        string text = $"{SceneManager.GetActiveScene().GetRootGameObjects().Length}";
        GUI.Box(new Rect(10, 10, Screen.width - 20, 20), text);
    }
}

运行后显示根对象数量为0,但场景内对象可正常工作,可能的原因如下:

  • 场景未完全加载就执行了方法
    OnGUI会在每帧触发,如果Overlay脚本所在对象在目标场景加载完成前就已激活,此时调用GetRootGameObjects会返回空。建议改用SceneManager.sceneLoaded回调,确保在场景加载完成后再获取根对象:

    void Start()
    {
        SceneManager.sceneLoaded += OnSceneLoaded;
    }
    
    void OnSceneLoaded(Scene scene, LoadSceneMode mode)
    {
        if (scene == SceneManager.GetActiveScene())
        {
            int rootCount = scene.GetRootGameObjects().Length;
            Debug.Log($"当前场景根对象数量:{rootCount}");
        }
    }
    
  • 活动场景与目标场景不匹配
    如果同时加载了多个场景,GetActiveScene()返回的可能不是你存放对象的场景。可以直接通过场景名获取目标场景:

    Scene targetScene = SceneManager.GetSceneByName("你的场景名称");
    int rootCount = targetScene.GetRootGameObjects().Length;
    

    也可以在编辑器Scene窗口确认当前活动场景的名称,确保与预期一致。

  • 根对象被移至Persistent场景
    若场景中的对象被调用过DontDestroyOnLoad,这些对象会被转移到Unity的Persistent Scene中,不再属于原场景。此时需要通过索引0获取Persistent Scene来访问这类对象:

    Scene persistentScene = SceneManager.GetSceneAt(0);
    int persistentRootCount = persistentScene.GetRootGameObjects().Length;
    
  • Unity版本存在已知bug
    Unity 2022.1.x属于迭代版本,可能存在场景相关的兼容性bug。建议升级到同系列的稳定版本(如2022.1.30及以上),或切换到LTS版本(如2021.3.x)测试问题是否消失。

  • 根对象被设置为隐藏标记
    如果场景中的根对象被设置了HideFlags.HideInHierarchy,GetRootGameObjects会忽略它们。可以通过遍历所有对象验证是否存在这类隐藏根对象:

    foreach (GameObject obj in FindObjectsOfType<GameObject>(true))
    {
        if (obj.transform.parent == null)
        {
            Debug.Log($"检测到根对象:{obj.name},隐藏标记:{obj.hideFlags}");
        }
    }
    

内容的提问来源于stack exchange,提问作者Landsailor

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 12:45:13