首页 > Unity3D专栏 > 【Unity3D】异步加载卡顿问题解决
2017
07-25

【Unity3D】异步加载卡顿问题解决

关于异步加载,很多人都是卡住,然后就进场景了,中间进度条基本没作用了。

雨松大神讲过一篇异步加载的,但是同样也是有问题的,跟直接跳转没什么区别。

但事实上,只要加上一句话就可以完成了。

yield return new WaitForEndOfFrame();  

等待直到所有的摄像机和GUI被渲染完成后,在该帧显示在屏幕之前。

代码如下:

using UnityEngine;    
using System.Collections;       
public class Loading : MonoBehaviour {        
    private float fps = 10.0f;    
    private float time;    
    //一组动画的贴图,在编辑器中赋值。    
    public Texture2D[] animations;    
    private int nowFram;    
    //异步对象    
    AsyncOperation async;       
    //读取场景的进度,它的取值范围在0 - 1 之间。    
    int progress = 0;      
    void Start()    
    {    
        //在这里开启一个异步任务,    
        //进入loadScene方法。    
        StartCoroutine(loadScene());    
    }       
    //注意这里返回值一定是 IEnumerator    
    IEnumerator loadScene()    
    {    
        yield return new WaitForEndOfFrame();//加上这么一句就可以先显示加载画面然后再进行加载  
        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("xuanyusong" +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( 100,100,40,60) ,tex[nowFram] );    
        //在这里显示读取的进度。    
        GUI.Label(new Rect( 100,180,300,60), "lOADING!!!!!" + progress);  
    }    
}    

 



虚拟世界提醒您:如果您觉得本文不错,快快将这篇文章分享出去吧 ,感谢您的支持和关注,谢谢!
最后编辑:
作者:虚拟世界
专注互联网技术及资讯 技术研究中心|有相关Unity3D问题或者作事宜请联系我哦!
捐 赠如果您愿意花10块钱请我喝一杯咖啡的话,请用手机扫描二维码即可通过支付宝或者微信直接向我捐款,在此非常感谢您对虚拟世界的捐赠。

留下一个回复

你的email不会被公开。