当关卡加载/完成时,我有一个简单的淡入/淡出协程设置。看起来像这样:
Image panel = GameObject.FindWithTag("FadePanel").GetComponent<Image>();
for (float o = 1; o > 0; o -= 0.05f) {
var colour = panel.color;
colour.a = o;
panel.color = colour;
yield return null;
}
for循环在淡出例程中是相反的。
此代码在加载新级别时可以正常工作,甚至在完成新级别后也加载相同级别,这与重新加载没有什么不同。但是,我的调试加速器F3 + A重新加载了当前级别,导致在设置图像颜色时抛出MissingReferenceException。
图像是我预先加载到场景中的播放器预制件的一部分。
这是我认为相关的代码(假设所有协程调用均正确):
void Update() {
if (Input.GetKey(/*F3 + A*/)) {
FadeAndLoad(currentLevel);
}
if (/*Touching end box*/) {
FadeAndLoad(nextLevel);
}
}
IEnumerator FadeAndLoad(string nextFile) {
// Fade out loop
LoadLevel(nextFile);
}
IEnumerator LoadLevel(string levelFile) {
currentLevel = levelFile;
SceneManager.LoadSceneAsync(1);
// Wait for loading to complete.
Scene levelScene = SceneManager.CreateScene("Level");
// Do some stuff with the file
SceneManager.MoveGameObjectToScene(Instantiate(PlayerObject, /*Data from the file*/), levelScene);
// Do some more stuff with the file
SceneManager.SetActiveScene(levelScene);
SceneManager.UnloadSceneAsync(1);
// Fade in loop
}