Unity3D异步加载方法

异步加载的方法很多,这里我介绍一下我前段时间学到的一个异步加载方法,感觉挺好用,有兴趣的可以看看,下面就直接贴代码:

/// <summary>
/// Async to load.
/// Created By Hong Youwei
/// 2015.3.25
/// </summary>

using UnityEngine;
using System.Collections;

public class AsyncToLoad : MonoBehaviour {
	public GameObject background;			// 获取游戏背景
    public GameObject loadingBar;           // 进度条对象
    UISlider slider;                        // 进度条脚本
    UILabel lable_Percentage;               // 显示进度的百分比的标签

	// Use this for initialization
	void Start () {
		UISprite sprite = background.GetComponent<UISprite> ();
		sprite.spriteName = GameInfo.loadSceneName;
        LoadScene();
	}

    // 调用加载界面的加载协程
    public void LoadScene() {
        slider = loadingBar.GetComponent<UISlider>();
        lable_Percentage = loadingBar.GetComponentInChildren<UILabel>();
        StartCoroutine(StartLoading(GameInfo.loadSceneName));//StartLoading后面括号填的是要加载的界面的名字,我这里填的是我自己的界面名字加载,使用的话,记得设置为你自己的界面名字比如StartCoroutine(StartLoading("Level1"));
    }

    // 异步加载协同程序
    IEnumerator StartLoading(string name) {

        int displayProgress = 0;                // 进度条显示值
        int toProgress = 0;                     // 进度条要达到的值
        AsyncOperation aop = Application.LoadLevelAsync(name);
        aop.allowSceneActivation = false;           // 设置不允许加载完成就进入界面
        // 判断是否进度小于0.9,如果是的话循环输出进度条的值
        while (aop.progress < 0.9f)
        {
            toProgress = (int)(aop.progress * 100);
            while (displayProgress < toProgress)
            {
                ++displayProgress;
                SetLoadingPercentage(displayProgress);
            }
            yield return new WaitForEndOfFrame();// 每次循环结束执行完当前帧才继续下一个循环
        }
        // Unity就只会加载场景到90%,剩下的10%要等到allowSceneActivation设置为true后才加载,所以设置增加进度条效果,让进度条平滑显示达到100%
        toProgress = 100;
        while (displayProgress < toProgress)
        {
            ++displayProgress;
            SetLoadingPercentage(displayProgress);
            yield return new WaitForEndOfFrame();
        }

        yield return new WaitForSeconds(0.2f);//延缓进入游戏时间,如果场景较小加载很快,为了看到进度效果,做了个小小延迟,不需要的可以去掉
        aop.allowSceneActivation = true;            // 设置加载完成可以进入界面
    }

    // 设置加载进度条信息
    void SetLoadingPercentage(int _value)
    {
        slider.value = _value / 100.0f;
        lable_Percentage.text = _value + "%";
    }
}

以上有一部分是直接调用了NGUI插件的UISprite做背景,调用UILable做一个百分比数字显示,调用UISlider作为一个进度条

时间: 2024-10-15 05:47:38

Unity3D异步加载方法的相关文章

关于unity3D异步加载进度条实时更新的方法

在其他地方看到所谓的实时更新就是 让slider的当前value等于异步对象的进度值而已,太坑了,这个正常来理解的意思不就是从0开始递增到100嘛,不管怎么我已经完成这个功能了,代码贴上,以免日后忘记, 找到这篇博客的朋友算你好运,直接搬走吧(NGUI版)~ 需要重点提醒的:异步对象AsyncOperation的值到90%后不会再增长,剩下的10%要让AsyncOperation.allowSceneActivation(意思是场景加载完毕后自动跳转场景)为true时才会自动完成~ 完整代码下方

unity3d 异步加载场景代码

1 using UnityEngine; 2 using System.Collections; 3 4 /// <summary> 5 /// 加载场景 6 /// </summary> 7 public class LoadSence : MonoBehaviour { 8 9 10 private IEnumerator StartLoading(string SenceName) 11 { 12 int displayProgress = 0; 13 int toProgr

Android异步加载图像(含线程池,缓存方法)

研究了android从网络上异步加载图像: (1)由于android UI更新支持单一线程原则,所以从网络上取数据并更新到界面上,为了不阻塞主线程首先可能会想到以下方法. 在主线程中new 一个Handler对象,加载图像方法如下所示 [java] view plaincopyprint? private void loadImage(final String url, final int id) { handler.post(new Runnable() { public void run()

vue路由的异步加载(懒加载)方法

vue路由的异步加载(懒加载)方法. javascriptvue.jsvue-router 阅读约 2 分钟 vue本身不多介绍.直接说问题,因为vue的所有路由都是加载在一个app.js里的,如果项目巨大,那么首页加载会是灾难.所以我们就需要把某些路由用异步加载(懒加载)的方式进行加载. 1.先来看正常的加载方式 import Login from "@/components/pages/signIn/signIn"; export default new Router({ rout

ngLazyLoad——让ng项目实现controllers按需异步加载

最初的源码来自:https://github.com/atian25/angular-lazyload/ 但由于一些个人的原因(我有强迫症...)所以把代码的书写风格按照我平日的喜好修改了下 也顺便认真的阅读了一遍源码,按照自己的理解,把原来的英文注释替换成中文的了 毕竟不是原作者,对ng框架也不是特别的熟,注释中的用词可能有不少不正确的地方,欢迎指出 下面是我稍微修改了一下的代码: /* * angular-lazyLoad * 一个angular项目的按需异步加载服务模块 * 支持 [Sea

JS异步加载的几种方式

一:同步加载 我们平时使用的最多的一种方式. <script src="http://yourdomain.com/script.js"></script> <script src="http://yourdomain.com/script.js"></script> 同步模式,又称阻塞模式,会阻止浏览器的后续处理,停止后续的解析,只有当当前加载完成,才能进行下一步操作.所以默认同步执行才是安全的.但这样如果js中有输

android从网络上异步加载图像

研究了android从网络上异步加载图像: (1)由于android UI更新支持单一线程原则,所以从网络上取数据并更新到界面上,为了不阻塞主线程首先可能会想到以下方法. 在主线程中new 一个Handler对象,加载图像方法如下所示 [java] view plaincopyprint? private void loadImage(final String url, final int id) { handler.post(new Runnable() { public void run()

Javascript 异步加载详解(转)

本文总结一下浏览器在 javascript 的加载方式. 关键词:异步加载(async loading),延迟加载(lazy loading),延迟执行(lazy execution),async 属性, defer 属性 一.同步加载与异步加载的形式 1. 同步加载 我们平时最常使用的就是这种同步加载形式: <script src="http://yourdomain.com/script.js"></script> 同步模式,又称阻塞模式,会阻止浏览器的后续

Javascript 异步加载详解

本文总结一下浏览器在 javascript 的加载方式. 关键词:异步加载(async loading),延迟加载(lazy loading),延迟执行(lazy execution),async 属性, defer 属性 一.同步加载与异步加载的形式 1. 同步加载 我们平时最常使用的就是这种同步加载形式: <script src="http://yourdomain.com/script.js"></script> 同步模式,又称阻塞模式,会阻止浏览器的后续