为什么我这样做了之后场景变换还是显示一瞬间的蓝色
时间: 2023-11-21 16:04:33 浏览: 43
Unity 异步加载场景时,当目标场景加载完成后,Unity 会默认将场景立即切换到目标场景。这可能会导致场景切换时会出现一瞬间的蓝色。
要避免这种情况,可以通过以下方式来解决:
在加载目标场景之前,先创建一个新的场景,并将其设置为当前场景。然后再异步加载目标场景。
在异步加载目标场景时,将 `allowSceneActivation` 属性设置为 false。这将防止 Unity 自动切换到目标场景。
在目标场景加载完成后,手动将当前场景切换到目标场景。
以下是修改后的示例代码:
```csharp
using UnityEngine;
using UnityEngine.SceneManagement;
using System.Collections;
public class SceneLoader : MonoBehaviour
{
public string sceneToLoad = "BlackScene";
public string loadingScene = "WhiteScene";
public float waitTime = 1f;
private AsyncOperation asyncLoad;
private Scene currentScene;
private void Start()
{
currentScene = SceneManager.GetActiveScene();
StartCoroutine(LoadSceneAsync());
}
IEnumerator LoadSceneAsync()
{
// 加载等待场景
SceneManager.LoadScene(loadingScene);
// 等待一定时间
yield return new WaitForSeconds(waitTime);
// 创建新场景并设置为当前场景
Scene newScene = SceneManager.CreateScene("TempScene");
SceneManager.SetActiveScene(newScene);
// 异步加载目标场景
asyncLoad = SceneManager.LoadSceneAsync(sceneToLoad, LoadSceneMode.Additive);
asyncLoad.allowSceneActivation = false;
// 等待加载完成
while (!asyncLoad.isDone)
{
if (asyncLoad.progress >= 0.9f)
{
asyncLoad.allowSceneActivation = true;
}
yield return null;
}
// 切换到目标场景
SceneManager.UnloadSceneAsync(currentScene);
SceneManager.SetActiveScene(SceneManager.GetSceneByName(sceneToLoad));
}
}
```
在这个示例中,我们创建了一个临时场景,并将其设置为当前场景。然后在加载目标场景时,我们将加载模式设置为 `LoadSceneMode.Additive`,这将使目标场景以附加场景的形式加载到当前场景中。当加载完成后,我们首先卸载当前场景,然后将临时场景切换到目标场景。这样就可以避免出现一瞬间的蓝色场景。
阅读全文