赞
踩
如有谬误,欢迎指正!
当我们进行游戏开发时,时常会进行场景切换,如果下个场景较大,切换时就会出现卡顿现象,甚至看起来像是"死机",非常影响用户体验,我们这时就可以运用异步加载,在界面上显示加载的进度条以提升用户体验,接下来我们就简略聊聊异步加载吧.
我要实现的功能是这样的:首先,第一个场景是一个UI界面,点击"开始加载"按钮进行加载下一场景,场景加载完成后自动跳转,通过文本和进度条显示加载进度,如图:
然后,第二个场景,也就是我们要加载的场景名为"Demo Valley",注意此场景必须加入到unity的build中才行(File->Build Setting):
接下来就该上代码了,如下(此脚本挂于Canvas上):
using UnityEngine; using UnityEngine.SceneManagement;//注意引用命名空间 using System; using UnityEngine.UI; public class LoadScene : MonoBehaviour { Slider slider;//滑动条 Text text;//文本 Button but;//按钮 // 加载进度 float loadPro = 0; // 用以接受异步加载的返回值 AsyncOperation AsyncOp = null; void Start() { Debug.Log("开始加载"); slider = transform.Find("Slider"). GetComponent<Slider>(); slider.value = 0; text = transform.Find("Text").GetComponent<Text>(); but = transform.Find("Button").GetComponent<Button>(); but.onClick.AddListener(StartLoad);//绑定按钮事件 } //点击按钮,开始加载下一场景,文本和进度条显示加载进度 void StartLoad() { AsyncOp = SceneManager.LoadSceneAsync("Demo Valley",LoadSceneMode.Single);//异步加载场景名为"Demo Valley"的场景,LoadSceneMode.Single表示不保留现有场景 AsyncOp.allowSceneActivation = false;//allowSceneActivation =true表示场景加载完成后自动跳转,经测,此值默认为true } void Update() { if (AsyncOp!=null)//如果已经开始加载 { loadPro = AsyncOp.progress; //获取加载进度,此处特别注意:加载场景的progress值最大为0.9!!! } if (loadPro >= 0.9f)//因为progress值最大为0.9,所以我们需要强制将其等于1 { loadPro = 1; } slider.value = Mathf.Lerp(slider.value, loadPro,1*Time.deltaTime);//滑动块的value以插值的方式紧跟进度值 if (slider.value > 0.99f) { slider.value = 1; AsyncOp.allowSceneActivation = true; } text.text =string.Format("{0:F0}%", slider.value*100);//文本中以百分比的格式显示加载进度 } }
此处需要注意的地方有以下几点:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。