SceneManager的常用方法
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);
        }
    }
}

首页 我的博客
粤ICP备17103704号