创建场景
创建新的场景后:
文件 -> 生成设置 -> Build中的场景 -> 将项目中需要使用的场景拖进去
SceneTest
public class SceneTest : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
// 两个类: 场景类、场景管理类
// 场景类
// 获取当前场景
Scene scene = SceneManager.GetActiveScene();
// 场景名称
Debug.Log(scene.name);
// 场景是否已经加载
Debug.Log(scene.isLoaded);
// 场景路径
Debug.Log(scene.path);
// 场景在(build中的场景)中的索引号
Debug.Log(scene.buildIndex);
// 获取场景中的所有物体(不包括子物体)
GameObject[] gos = scene.GetRootGameObjects();
Debug.Log(gos.Length);
// 场景管理类
// 【场景加载】 场景同步加载,使用在(build中的场景)中的索引号加载
SceneManager.LoadScene(1);
// 【场景加载】 使用场景名称加载
SceneManager.LoadScene("MyScene");
// 【场景加载】 单一场景加载, 加载后只存在一个场景
SceneManager.LoadScene("MyScene", LoadSceneMode.Single);
// 【场景加载】 融合场景加载,加载后与之前场景重叠在一起, 但如果场景多会卡顿,要使用异步加载
SceneManager.LoadScene("MyScene", LoadSceneMode.Additive);
// 【创建场景】创建新的场景
Scene newScene = SceneManager.CreateScene("NewScene");
// 【场景数量】当前已经加载的场景数量
Debug.Log(SceneManager.sceneCount);
// 【卸载场景】场景异步销毁
SceneManager.UnloadSceneAsync(newScene);
}
// Update is called once per frame
void Update()
{
}
}
场景异步加载----协程
AsyncTest
public class AsyncTest : MonoBehaviour
{
private AsyncOperation operation;
private float timer = 0;
void Start()
{
// 【调用协程】 使用该函数来使用协程
StartCoroutine(loadScene());
}
// 【协程】 使用协程方法来异步加载场景
IEnumerator loadScene(){
// 异步加载场景,使用索引号
operation = SceneManager.LoadSceneAsync(1);
// 加载完成场景后不会自动跳转, 可自己加计时器来控制跳转
operation.allowSceneActivation = false;
yield return operation;
}
void Update()
{
// 【加载进度】 输出加载进度(0-0.9)
Debug.Log(operation.progress);
// 使用计时器来控制场景跳转, 5秒后跳转
timer += Time.deltaTime;
if (timer > 5)
{
operation.allowSceneActivation = true;
}
}
}