【问题标题】:Get Children of New Scene获取新场景的孩子
【发布时间】:2017-01-02 19:32:12
【问题描述】:

我有一个GameManager 脚本,它管理加载场景、将角色放入场景、从游戏对象中读取地图信息等等。 GameManager 脚本设置为 DontDestroyOnLoad

我正试图弄清楚如何在新场景加载后从GameManager 访问我的新场景中的对象。我正在使用SceneManager.sceneLoaded 事件来运行我的“场景初始化”代码。这是事件处理程序:

 void OnLevelFinishedLoading(Scene scene, LoadSceneMode mode)
 { 
    // I want to access GameObjects within the newly loaded scene here
    //
    // SceneManager.GetActiveScene().GetRootGameObjects() returns               
    // System.ArgumentException: the scene is not loaded

    // I want to do something like this
    foreach (MapFeature mapFeature in rootObject.GetComponentsInChildren<MapFeature>())
    {
       // Do something
    }
 }

我想获取新场景的根级别GameObject,然后在该根对象上使用GetComponentInChildren,以便动态抓取场景中的各种组件并将它们存储在GameManager 中。但是,SceneManager.GetActiveScene().GetRootGameObjects() 返回System.ArgumentException: the scene is not loaded

如何从GameManager 中新加载的场景中获取对象?如果有比获取新场景的根对象并使用它来获取其子对象更好的方法,我会全力以赴。

【问题讨论】:

    标签: unity3d


    【解决方案1】:

    这似乎可以通过一种解决方法来实现,其中 sceneLoaded 事件启动一个协程等待下一帧。下面是相关的sn-p。

    作为参考,我最近在 unityforums 上阅读了这个帖子:https://forum.unity3d.com/threads/scenemanager-sceneloaded-event-when-fired-checking-scene-isloaded-false.429659/

    void Awake () {
        instance = this;
        DontDestroyOnLoad (gameObject);
        SceneManager.sceneLoaded += OnSceneLoadedWrapper;
    }
    void OnSceneLoadedWrapper(Scene scene, LoadSceneMode mode) {
        StartCoroutine ("OnSceneLoaded");
    }
    
    IEnumerator OnSceneLoaded(){
        yield return new WaitForEndOfFrame ();
        Scene scene = SceneManager.GetActiveScene ();
        int count = scene.GetRootGameObjects ().Length;
        string name = scene.GetRootGameObjects ()[0].name;
        Debug.LogFormat ("{0} root objects in Scene, first one called {1}", count, name);
    }
    

    【讨论】:

    • 谢谢。看起来事件可能以错误的顺序被触发,所以sceneLoaded 在新场景的初始事件之前被触发?
    猜你喜欢
    • 2015-04-17
    • 2020-11-11
    • 2013-09-27
    • 1970-01-01
    • 2011-11-10
    • 1970-01-01
    • 2018-08-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多