Unity 多場景

多場景不但可以歸類go達到清晰的目的,遊戲也可以用多場景來管理關卡,每個Level(關卡)一個scene,公用的東西放入一個公用scene裏。

例如這樣劃分:
公用:camera、canvas、storage、game、eventsystem
Level:Light、場景相關的go
*Light在關卡里

問題1:
Environmental lighting 不正確。
每個scene有自己的lingting settings。Unity會使用active scene的lighting settings

問題2:
Baking lighting不正確。
關掉Level scene裏Lighting settings的Auto Generate(自動生成)。這樣需手動來生成Baking lighting。
公用scene的可以打開。

問題3:
在editor裏已經在編輯,運行時重複加載level
在start裏檢查:
void Start () {
if (Application.isEditor) {
for (int i = 0; i < SceneManager.sceneCount; i++) {
Scene loadedScene = SceneManager.GetSceneAt(i);
if (loadedScene.name.Contains("Level ")) {
SceneManager.SetActiveScene(loadedScene);
return;
}
}
}
StartCoroutine(LoadLevel());
}

問題4
Unloading上一scene。
避免永遠additive,記錄下buildindex(在build中的index)
IEnumerator LoadLevel (int levelBuildIndex) {

loadedLevelBuildIndex = levelBuildIndex;
enabled = true;
}
IEnumerator LoadLevel (int levelBuildIndex) {
enabled = false;
if (loadedLevelBuildIndex > 0) {
yield return SceneManager.UnloadSceneAsync(loadedLevelBuildIndex);
}
yield return SceneManager.LoadSceneAsync(
levelBuildIndex, LoadSceneMode.Additive
);
SceneManager.SetActiveScene(
SceneManager.GetSceneByBuildIndex(levelBuildIndex)
);
loadedLevelBuildIndex = levelBuildIndex;
enabled = true;
}

關鍵代碼:
建立場景
poolScene = SceneManager.CreateScene(name);

加載場景
SceneManager.LoadScene(“Level 1”, LoadSceneMode.Additive);

加載並且設置active,需要等待下一幀纔可以設置,setactive只對於完成加載的scene
void Awake () {
shapes = new List();
StartCoroutine(LoadLevel());
}
IEnumerator LoadLevel () {
SceneManager.LoadScene(“Level 1”, LoadSceneMode.Additive);
yield return null;
SceneManager.SetActiveScene(SceneManager.GetSceneByName(“Level 1”));
}

異步加載,有些場景未必加載後就直接工作,可以由scene自己拋出Hide Loading UI的時機。
IEnumerator LoadLevel () {
enabled = false;
yield return SceneManager.LoadSceneAsync(
“Level 1”, LoadSceneMode.Additive
);
SceneManager.SetActiveScene(SceneManager.GetSceneByName(“Level 1”));
enabled = true;
}

把建立的go放入scene
instance = Instantiate(prefab);
SceneManager.MoveGameObjectToScene(instance.gameObject, poolScene);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章