使用热键重新加载场景时缺少MissingReferenceException

时间:2019-04-16 06:05:32

标签: c# unity3d gameobject

当关卡加载/完成时,我有一个简单的淡入/淡出协程设置。看起来像这样:

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
}

0 个答案:

没有答案