using System.Collections; using UnityEngine; using UnityEngine.SceneManagement; public class ShapeFactory : MonoBehaviour { Scene poolScene; int loadedLevelBuildIndex = 0; void CreatePools() { //Scene是结构体 if (Application.isEditor) { //通过名字获取场景 poolScene = SceneManager.GetSceneByName(name); if (poolScene.isLoaded)//判断场景是否加载了 { //获取场景中所有的root物体 GameObject[] rootObjects = poolScene.GetRootGameObjects(); return; } } //动态创建一个新场景 poolScene = SceneManager.CreateScene(name); } IEnumerator LoadLevel(int levelBuildIndex) { enabled = false; if (loadedLevelBuildIndex > 0) { //异步卸载index场景 index为buildsetting中右边的数字 yield return SceneManager.UnloadSceneAsync(loadedLevelBuildIndex); } //异步以叠加的方式加载场景 yield return SceneManager.LoadSceneAsync(levelBuildIndex, LoadSceneMode.Additive); //设置这个场景为激活状态,表示实例化的物体放到这个场景下和使用这个场景的灯光设置 SceneManager.SetActiveScene( SceneManager.GetSceneByBuildIndex(levelBuildIndex) ); loadedLevelBuildIndex = levelBuildIndex; enabled = true; } public void SetInScene(GameObject go) { if (poolScene.isLoaded) { //将物体放到某个场景中 SceneManager.MoveGameObjectToScene(go, poolScene); } } }