版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/mseol/article/details/81060713
使用LoadSceneMode.Additive,可以同时加载多个场景。但是并不是所有可以见元素都是可以直接调用的。如图,加载了scene02,激活后显示为粗体。
一些常用对象的说明:
- 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
}