返回
Unity 使用 Addressables 切换场景,使用一个加载场景作为缓冲,控制显示加载进度条百分比
前端
2023-12-14 14:48:56
引言
在游戏开发中,无缝且快速的场景转换至关重要。Unity 的 Addressables 系统提供了一种有效的方法来异步加载和卸载场景,但它可能需要一些额外的技巧来实现平滑的过渡。本文将引导你逐步完成使用 Addressables 切换场景的最佳实践,其中包括使用缓冲场景控制加载进度条百分比。
设置 Addressables
首先,确保已导入 Addressables 系统并已标记要加载的场景。在 Project 设置中导航到“Addressables”选项卡,然后单击“Add Scene”按钮选择要包括的场景。
创建缓冲场景
为了平滑场景转换,我们将创建一个缓冲场景,其中包含加载进度条。这将允许我们在加载目标场景时向用户显示进度。
- 创建一个新场景并命名为“LoadingScene”。
- 添加一个画布(Canvas)对象并为其创建一个脚本(LoadingSceneManager.cs)。
- 在 LoadingSceneManager.cs 脚本中,添加以下代码:
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
using UnityEngine.Addressables;
using System;
public class LoadingSceneManager : MonoBehaviour
{
public Slider loadingSlider;
public string targetSceneName;
private AsyncOperation loadingOperation;
public void Start()
{
loadingSlider.value = 0f;
StartCoroutine(LoadTargetScene());
}
private IEnumerator LoadTargetScene()
{
// 使用 Addressables 加载目标场景
loadingOperation = Addressables.LoadSceneAsync(targetSceneName, LoadSceneMode.Additive);
// 等待场景加载完成
while (!loadingOperation.isDone)
{
// 更新加载进度条
loadingSlider.value = Mathf.Clamp01(loadingOperation.progress);
yield return null;
}
// 激活目标场景
SceneManager.SetActiveScene(SceneManager.GetSceneByName(targetSceneName));
// 卸载缓冲场景
Addressables.UnloadSceneAsync("LoadingScene", false);
}
}
集成缓冲场景
现在,让我们将缓冲场景集成到场景转换流程中:
- 在要切换的场景中,附加一个名为“SceneSwitcher.cs”的脚本。
- 在 SceneSwitcher.cs 脚本中,添加以下代码:
using UnityEngine;
using System.Collections;
using UnityEngine.SceneManagement;
using UnityEngine.Addressables;
using System;
public class SceneSwitcher : MonoBehaviour
{
public string targetSceneName;
public void LoadTargetScene()
{
// 先加载缓冲场景
Addressables.LoadSceneAsync("LoadingScene", LoadSceneMode.Additive, false, OnLoadingSceneLoaded);
}
private void OnLoadingSceneLoaded(AsyncOperationHandle<SceneInstance> operation)
{
// 获取缓冲场景中的 LoadingSceneManager 脚本
LoadingSceneManager loadingSceneManager = FindObjectOfType<LoadingSceneManager>();
// 设置目标场景名称
loadingSceneManager.targetSceneName = targetSceneName;
}
}
控制加载进度条百分比
通过使用缓冲场景,我们可以控制加载进度条百分比的显示。在 LoadingSceneManager.cs 脚本中,我们使用 Mathf.Clamp01(loadingOperation.progress)
来限制进度条值介于 0 和 1 之间。这将确保进度条准确反映目标场景的加载进度。
结论
使用 Addressables 切换场景时,结合缓冲场景,可以显著提升用户体验,提供平滑的场景转换和可视化的加载进度。本文提供了分步指南,展示了如何实现这一功能。通过遵循这些最佳实践,你可以确保你的 Unity 游戏在切换场景时始终流畅且引人入胜。