1、場景的基本操作
1、創建新場景
Ctrl+N快捷鍵可以快速創建出新場景,創建出來的是一個臨時的場景,需要保存起來后續才能使用(三種場景可供選擇創建)
創建場景
2、修改和保存場景
修改:打開場景后直接對里面的物體進行修改,比如添加物體、刪除物體,給物體添加組件等。
保存:修改完畢后需要保存才能生效,保存的快捷鍵是Ctrl+S.
3、刪除場景
右鍵選擇要刪除的場景,直接點擊刪除即可。
2、場景加載
1、場景同步加載
1、把場景添加到可加載的場景里面
左上角文件-Bulid Settings然后把要使用的場景拖動進Bulid Scene中
場景拖入
2、同步加載API
1、SceneManager .LoadScene()
參數可以傳遞場景名稱或者場景的索引
2、如果加載場景需要保持舊場景不被銷毀,可以第一重參數填寫完之后輸入“,”填寫第二重參數,填寫LoadSceneMode.Additive即可。
void Start() {
// , LoadSceneMode.Additive 附加,不刪除前一個場景
SceneManager.LoadScene(1, LoadSceneMode.Additive);
}
2、場景異步加載
1、和同步加載區別
1、同步加載的過程線程是阻塞住的
2、異步是不會阻塞線程的,可以在加載的過程中繼續去執行一些代碼,比如說去同步每個玩家的加載進度。
2、異步加載API
SceneManager.LoadSceneAsync()
,參數和同步加載的一樣,有返回值,返回一個AsyncOperation
3、AsyncOperation作用
1、AsyncOperation.isDone可以用來判斷是否加載完成,實際上用到比較少,較多的還是用進度,因為這個屬性呢是要加載完畢且開啟跳轉后,跳轉成功了才會變為完成
2、AsyncOperation.allowSceneActivation加載完成后是否允許跳轉,當我們不允許的時候,他即使加載完成了也不會跳轉過去
3、AsyncOperation.progress是他的加載進度,實際上呢到0.9就已經是加載完了的,所以如果要根據這個進度做加載進度條呢,需要做一些處理。
void Start() {
// 開啟協成
StartCoroutine(Load());
}
private IEnumerator Load() {
AsyncOperation asyncOperation = SceneManager.LoadSceneAsync("Scenes/Scenes3", LoadSceneMode.Additive);
asyncOperation.allowSceneActivation = false;
while (asyncOperation.progress < 0.9f) {
Debug.Log("當前進度" + asyncOperation.progress);
yield return null;
}
Debug.Log("當前進度" + asyncOperation.progress);
asyncOperation.allowSceneActivation = true;
yield return null;
if (asyncOperation.isDone) {
Debug.Log("加載完成");
} else {
Debug.Log("加載失敗");
}
}
3、保留物體到下個場景中
使用的API:DontDestroyOnLoad();
void Start() {
GameObject gameObject = GameObject.Find("Capsule");
DontDestroyOnLoad(gameObject);
SceneManager.LoadScene(1, LoadSceneMode.Additive);
}