场景的切换是游戏中不可避免的。一般来说,为了防止同步加载所带来的卡顿感,我们都会选择使用异步加载场景。
在加载的过程中,一般是弄一个进度条或者弄个转转转的小圈圈,甚至可以弄个小游戏。
这里简单介绍一下如何实现进度条。
思路
定义异步对象
private AsyncOperation m_Operation;
场景加载协程
IEnumerator LoadScence(String loadScenceName)
{
operation = SceneManager.LoadSceneAsync(loadScenceName);
//阻止当加载完成自动切换
operation.allowSceneActivation = false;
yield return operation;
}
update方法控制进度条
private void Update() {
SceneLoadingRate = m_asyncOperation.progress;
if(SceneLoadingRate != 0) {
//这个变量上限就是0.9
if(m_asyncOperation.progress >= 0.9f) {
SceneLoadingRate = 1f;
}
//差值运算
if(SceneLoadingRate != m_Slider.value) {
m_Slider.value = Mathf.Lerp(m_Slider.value, SceneLoadingRate, Time.deltaTime * 2);
if(SceneLoadingRate - m_Slider.value <= 0.01f) {
m_Slider.value = SceneLoadingRate;
}
}
if(m_Slider.value == 1f) {
m_asyncOperation.allowSceneActivation = true;
}
}
当然可以加上其他逻辑集成一个场景管理脚本,这里就不赘述了。