Unity异步加载关卡
Posted wow大魔王
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity异步加载关卡相关的知识,希望对你有一定的参考价值。
Async异步加载
一、异步加载是什么?
当加载的场景资源很大时,会需要一定时间,这样可能会让玩家以为游戏卡住了。使用异步加载场景,
会保留当前场景的情况下,后台加载场景从而在场景加载完成后再进入下一个场景。
二、使用异步加载
1.SceneManager.LoadSceneAsync();
代码如下(示例):新建一个脚本
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class GameManager : MonoBehaviour
//外部调用这个方法开始加载
public void LoadGameLevel()
StartCoroutine("LoadGame");
IEnumerator LoadGame()
//异步加载
AsyncOperation operation=SceneManager.LoadSceneAsync(SceneManager.GetActiveScene().buildIndex + 1);
yield return null;
虽然能用,但是不直观没有加载进度显示。
2.UI显示加载进度
1、添加滑动条来充当加载进度条。
代码如下(示例):
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
public class GameManager : MonoBehaviour
public Text text;
public Slider slider;
public void LoadGameLevel()
StartCoroutine("LoadGame");
IEnumerator LoadGame()
//异步加载
AsyncOperation operation=SceneManager.LoadSceneAsync(SceneManager.GetActiveScene().buildIndex + 1);
//当异步加载还未完成时
while(!operation.isDone)
text.text = operation.progress * 100 + "%";//显示进度
slider.value = operation.progress;//显示进度条
yield return null;
AsyncOperation的变量:
3.设置为加载完成后,按下任一按键进入场景
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
public class GameManager : MonoBehaviour
public Text text;
public Slider slider;
public void LoadGameLevel()
StartCoroutine("LoadGame");
IEnumerator LoadGame()
//异步加载
AsyncOperation operation=SceneManager.LoadSceneAsync(SceneManager.GetActiveScene().buildIndex + 1);
//禁止在场景准备就绪后立即激活场景
operation.allowSceneActivation = false;
//当异步加载还未完成时
while(!operation.isDone)
text.text = operation.progress * 100 + "%";
slider.value = operation.progress;
if(slider.value>=0.9f)
slider.value = 1;
text.text = "按下任一键进入";
//检测任一键被按下
if(Input.anyKeyDown)
//允许在场景准备就绪后立即激活场景
operation.allowSceneActivation = true;
yield return null;
关于operation.progress:返回操作的进度。(只读) 这将返回操作的剩余进度。当进度浮点值到达 1.0 并调用 isDone 时,操作结束。如果将 allowSceneActivation 设置为 false,则进度将在 0.9 处停止,直到被设置为 true。 当allowSceneActivation设置为ture时,就会跳转到加载好的场景。
unity3d中怎么制作关卡载入进度条
1.新建两个场景,保存为level1和level2
2.将图片素材放进工程文件中,分别作为关卡背景、进度条背景和进度条前景
3.创建C#脚本,取名Life
4.打开脚本,加入如图所示代码
5.将脚本拖拽到摄像机上,将三张图片对号入座到图片变量中
6.按播放键调试
/*
用Unity做血条或进度条真的很方便,GUI里scrollbar就可以轻松实现,再加上lerp一个血条或进度条就完成了。
*/
using UnityEngine;
using System.Collections;
public class BloodBarTest : MonoBehaviour
public GUISkin theSkin;
public float bloodValue = 0.0f;
private float tmpValue;
private Rect rctBloodBar;
private Rect rctUpButton;
private Rect rctDownButton;
private bool onoff;
// Use this for initialization
void Start ()
rctBloodBar = new Rect (20,20,20,200);
rctUpButton = new Rect (50,20,40,20);
rctDownButton = new Rect (50,50,40,20);
tmpValue = bloodValue;
void OnGUI ()
GUI.skin = theSkin;
if (GUI.Button (rctUpButton,"加血"))
tmpValue = -1.0f;
if (GUI.Button (rctDownButton,"减血"))
tmpValue += 0.1f;
if (bloodValue > 0.0f) tmpValue = 0.0f;
if (bloodValue < -1.0f) tmpValue = -1.0f;
bloodValue = Mathf.Lerp(bloodValue,tmpValue,0.05f);
//~ Debug.Log (bloodValue + " " + tmpValue);
GUI.VerticalScrollbar(rctBloodBar, 1.0f, bloodValue,0.0f, 1.0f,GUI.skin.GetStyle("verticalScrollbar"));
// Update is called once per frame
void Update ()
参考技术B 不知道有没有插件显示的,研究中...现在3.0了
以上是关于Unity异步加载关卡的主要内容,如果未能解决你的问题,请参考以下文章
在 Unity3D 中,如何在迭代 FileInfo[] 数组(非阻塞)时异步显示 UI 径向进度条?