unity多场景加载与GameObject实例管理

使用LoadSceneMode.Additive,可以同时加载多个场景。但是并不是所有可以见元素都是可以直接调用的。如图,加载了scene02,激活后显示为粗体。
unity多场景加载与GameObject实例管理_第1张图片

一些常用对象的说明:

  • Directional Light 不对另一个场景中的物体有作用,需要在独立的场景中单独创建。
  • EventSystem 只需要在一个场景中存在。
  • Camera 可以看见另一个场景的物体。
  • GameObject 只能操作当前ActiveScene中的物体,如果要把一个物体移动到另一个scene中,使用SceneManager.MoveGameObjectToScene(GameObject, Scene)方法。
  • GameObject.Find() 可以找到所有场景中的物体。

使用一个例子理解

IEnumerator LoadSC()
{
    #region  处于scene01

    GameObject go0 = Instantiate(prefab);
    go0.name = SceneManager.GetActiveScene().name + "_cube";
    //go.transform.SetParent(this.transform);

    yield return SceneManager.LoadSceneAsync("scene02", LoadSceneMode.Additive);
    Debug.Log("[log1] >> " + SceneManager.GetActiveScene().name); //scene01

    Scene _scene02 = SceneManager.GetSceneByName("scene02");
    yield return new WaitUntil(() => _scene02.isLoaded);
    Debug.Log(SceneManager.sceneCount + " / " + _scene02.isLoaded);

    SceneManager.MoveGameObjectToScene(go0, _scene02); //go必须在scene1的root下

    #endregion

    #region  处于scene02

    // 处于scene02
    SceneManager.SetActiveScene(_scene02);
    Debug.Log("[log2] >> " + SceneManager.GetActiveScene().name);

    GameObject go1 = Instantiate(prefab); //会创建到当前Active的场景
    go1.name = SceneManager.GetActiveScene().name + "_cube";

    #endregion
}

你可能感兴趣的:(unity3d)