unity3d异步加载场景
2014-03-28 15:57
218 查看
根据宣雨松前辈的教程来做的,因为我用到的场景不是在游戏里的那种(本人做增强现实的,完全把unity拿来做应用了=。=),所以这里的方法不是很全面,原文戳这里:点击打开链接
异步加载流程:
lovdlevel 异步读取
A---------------> B ------------------------>C
播放加载动画
示例背景介绍:A场景是一个菜单,鼠标选中其中一项,则跳转到相应场景(C场景),B场景为加载动画播放场景
A场景:摄像机添加menu.cs
B场景:绑定loading.cs,把loading图片附到loading.cs
menu.cs:
loading.cs
异步加载流程:
lovdlevel 异步读取
A---------------> B ------------------------>C
播放加载动画
示例背景介绍:A场景是一个菜单,鼠标选中其中一项,则跳转到相应场景(C场景),B场景为加载动画播放场景
A场景:摄像机添加menu.cs
B场景:绑定loading.cs,把loading图片附到loading.cs
menu.cs:
using UnityEngine; using System.Collections; public class Globe{ //在这里记录当前切换场景的名称 public static string loadName; } public class menu : MonoBehaviour { // Use this for initialization void Start () { } // Update is called once per frame void Update () { if (Input.GetKey(KeyCode.Escape)) Application.Quit(); Camera cam = Camera.mainCamera; if (Input.GetMouseButtonDown(0)) { Ray ray = cam.ScreenPointToRay(Input.mousePosition); RaycastHit hit; if (Physics.Raycast(ray, out hit) ) { switch (hit.collider.name) { case "***": Globe.loadName = "C"; Application.LoadLevel ("B"); break; case "***": Globe.loadName = "CCC"; Application.LoadLevel ("B"); break; } } } } }
loading.cs
using UnityEngine; using System.Collections; public class loading : MonoBehaviour { private float fps = 1000.0f; private float time; //一组动画的贴图,在编辑器中赋值。 public Texture2D[] animations; private int nowFram; //异步对象 AsyncOperation async; //读取场景的进度,它的取值范围在0 - 1 之间。 int progress = 1; void Start() { //在这里开启一个异步任务, //进入loadScene方法。 StartCoroutine(loadScene()); } //注意这里返回值一定是 IEnumerator IEnumerator loadScene() { //异步读取场景。 //Globe.loadName 就是A场景中需要读取的C场景名称。 async = Application.LoadLevelAsync(Globe.loadName); //读取完毕后返回, 系统会自动进入C场景 yield return async; } void OnGUI() { //因为在异步读取场景, //所以这里我们可以刷新UI DrawAnimation(animations); } void Update() { //在这里计算读取的进度, //progress 的取值范围在0.1 - 1之间, 但是它不会等于1 //也就是说progress可能是0.9的时候就直接进入新场景了 //所以在写进度条的时候需要注意一下。 //为了计算百分比 所以直接乘以100即可 progress = (int)(async.progress *100); //有了读取进度的数值,大家可以自行制作进度条啦。 Debug.Log(progress); } //简单绘制2D动画 void DrawAnimation(Texture2D[] tex) { time += Time.deltaTime; if(time >= 1.0 / fps){ nowFram++; time = 0; if(nowFram >= tex.Length) { nowFram = 0; } } GUI.DrawTexture(new Rect( (Screen.width-60)*0.5f,(Screen.height-60)*0.5f,60,60) ,tex[nowFram] ); //在这里显示读取的进度。 GUI.Label(new Rect( (Screen.width-100)*0.5f,(Screen.height-60)*0.5f+100,100,60), "LOADING..." + progress+"%"); } }
相关文章推荐
- Unity3D异步加载游戏场景
- unity3d异步加载场景
- Unity3D研究院之异步加载游戏场景与异步加载游戏资源进度条(三十一)
- Unity3D 场景切换异步加载进度
- Unity3D异步加载游戏场景
- Unity3D-UGUI-Image制作异步加载场景进度条
- (转)Unity3D研究院之异步加载游戏场景与异步加载游戏资源进度条(三十一)
- unity3d异步加载场景
- Unity3D之异步加载游戏场景中关于进度条显示
- Unity3D学习之异步加载游戏场景与异步加载游戏资源进度条
- Unity3D之UGUI——制作异步加载场景进度条
- (转)Unity3D研究院之异步加载游戏场景与异步加载游戏资源进度条(三十一)
- unity3d实现Loading进度条异步加载场景
- unity3d异步加载场景
- unity3d 异步加载场景和游戏对象
- Unity3D场景异步加载的实现案例
- 【Unity3D 打斗游戏开发】之二 异步加载场景
- unity3d,异步加载场景
- [Unity3D]异步加载游戏场景与异步加载游戏资源进度条
- Unity3D——异步加载游戏场景loading界面的开发