Unity实现场景加载功能

unity场景加载分为同步加载和异步加载,供大家参考,具体内容如下

同步加载 loadScene

首先将前置工作做好。
创建一个项目工程,然后创建三个场景 loading00、loading01、loading02。每个场景分别创建一个cube、Sphere、Capsule 。然后打开File -> Build Settings, 然后将创建的 loading00、loading01、loading02拖拽到Scenes In Build中。如下图:

然后再创建一个 loading.cs 脚本,然后写上这段代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class loading : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
     // 同步加载场景
        SceneManager.LoadScene(1, LoadSceneMode.Additive);
    }

    // Update is called once per frame
    void Update()
    {

    }
}

SceneManager.LoadScene(1, LoadSceneMode.Additive);
第一个参数是表示加载的场景序号,第二个参数是 加载场景后,是否删除旧场景。

场景序号就是在 BuildSettings 中的序号如下图:

当然,第一个参数也可以写场景的路径:
SceneManager.LoadScene(“Scenes/loading01”, LoadSceneMode.Additive);

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class loading : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
     // 同步加载场景
        SceneManager.LoadScene("Scenes/loading01", LoadSceneMode.Additive);
    }

    // Update is called once per frame
    void Update()
    {

    }
}

与上述代码想过是一致的。

异步加载

异步加载需要先介 AsyncOperation 类

SceneManager.LoadSceneAsync(1, LoadSceneMode.Additive) 这个是异步加载的函数,其参数的用法跟同步加载的用法一致,然后,返回值 是一个 As yncOperation 类。

AsyncOperation 的用处:

  • AsyncOperation.isDone 这个是用来判断加载是否完成。这个属性是加载完并且跳转成功后才会变成完成
  • AsyncOperation.allowSceneActivation 这个是加载完后,是否允许跳转,当为false时,即使场景加载完了,也不会跳转
  • AsyncOperation.progress 这个时表示加载场景的进度。实际上的值时 0 - 0.9, 当值为0.9的时候,场景就已经加载完成了。

我们要异步加载场景的话,一般都是需要用协程一起工作

代码如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class loading : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        StartCoroutine(Load());
    }

    IEnumerator Load()
    {

        AsyncOperation asyncOperation = SceneManager.LoadSceneAsync(1, LoadSceneMode.Additive);

        asyncOperation.allowSceneActivation = false;    // 这里限制了跳转

        // 这里就是循环输入进度
        while(asyncOperation.progress < 0.9f)
        {
            Debug.Log(" progress = " + asyncOperation.progress);
        }

        asyncOperation.allowSceneActivation = true;    // 这里打开限制
        yield return null;

        if(asyncOperation.isDone)
        {
            Debug.Log("完成加载");
        }
    }

    // Update is called once per frame
    void Update()
    {

    }
}

异步和同步的区别

异步不会阻塞线程,可以在加载过程中继续去执行其他的一些代码,(比如同时加载进度)而同步会阻塞线程,只有加载完毕显示后才能继续执行之后的一些代码。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Unity3D选择本地图片并加载

    本文实例为大家分享了Unity3D选择本地图片并加载的具体代码,供大家参考,具体内容如下 ①找到System.Windows.Forms.dll:在unity的安装目录中找到它,如 E:\ProgramFiles(x86)\Unity\Editor\Data\Mono\lib\mono\2.0 ②设置.NET 2.0集:Untiy默认是.NET 2.0 Subset.在Edit->Project Settings->Player->OtherSettings中修改 ③任意打开一项目,新建

  • Unity实现场景加载功能

    unity场景加载分为同步加载和异步加载,供大家参考,具体内容如下 同步加载 loadScene 首先将前置工作做好. 创建一个项目工程,然后创建三个场景 loading00.loading01.loading02.每个场景分别创建一个cube.Sphere.Capsule .然后打开File -> Build Settings, 然后将创建的 loading00.loading01.loading02拖拽到Scenes In Build中.如下图: 然后再创建一个 loading.cs 脚本,

  • 使用MUI框架模拟手机端的下拉刷新和上拉加载功能

    mui框架基于htm5plus的XMLHttpRequest,封装了常用的Ajax函数,支持GET.POST请求方式,支持返回json.xml.html.text.script数据类型: 本着极简的设计原则,mui提供了mui.ajax方法,并在mui.ajax方法基础上,进一步简化出最常用的mui.get().mui.getJSON().mui.post()三个方法. 套用mui官方文档的一句话:"开发者只需关心业务逻辑,实现加载更多数据即可".真的是不错的框架. 想更多的了解这个框

  • mui上拉加载功能实例详解

    最近在做移动端的项目,用到了mui的上拉加载,整理如下: 1.需要引入的css.js <link rel="stylesheet" href="common/mui/css/mui.min.css" rel="external nofollow" > <script src="js/jquery-3.2.0.min.js"></script> <script src="com

  • Android实现从缓存中读取图片与异步加载功能类

    本文实例讲述了Android实现从缓存中读取图片与异步加载功能类.分享给大家供大家参考,具体如下: 在新浪微博的微博列表中的图片,为了加速其显示也为了加快程序的响应,可以参考该图片异步加载类实现. public class AsyncImageLoader { //SoftReference是软引用,是为了更好的为了系统回收变量 private HashMap<String, SoftReference<Drawable>> imageCache; public AsyncImag

  • MUI 上拉刷新/下拉加载功能实例代码

    新闻信息列表必备的功能,支持Table,Ul等列表. 以下是DIV版本,在安卓端或者ios端必须使用双webview模式,传送门:http://dev.dcloud.net.cn/mui/pulldown/ <!--下拉刷新容器--> <div id="pullrefresh" class="mui-content mui-scroll-wrapper"> <div class="mui-scroll"> &l

  • jQuery实现下拉加载功能实例代码

    废话不多说了,直接给大家贴代码了,具体代码如下所示: <script> var str = ''; if(page=="") page=1; var stop=true;//触发开关,防止多次调用事件 $(window).scroll( function(event){ //当内容滚动到底部时加载新的内容 100当距离最底部100个像素时开始加载. if ($(this).scrollTop() + $(window).height() + 10 >= $(docum

  • JavaScript模仿Pinterest实现图片预加载功能

    前言 对于Pinterest网站,从前端设计出发的话,我们一定不会忘记我们曾经非常流行的瀑布流布局.但是今天,给大家简要分析下 Pinterest上另外一项非常值得借鉴图片加载细节. 看看下面的截图: 大家可以感觉到图片出来的时候预先绘制轮廓,重点是预制区域的颜色采用与图片较为相似的色彩值,当图片加载完全后,会有种渐入的效果. 其中谷歌的图片搜索也用到了类似效果: 我们称之为这种效果为Color Placeholder [色彩预置],当图片加载的时候,我们优先显示其所在容器的背景颜色(如同很多会

  • Yii安装EClientScript插件扩展实现css,js文件代码压缩合并加载功能

    本文实例讲述了Yii安装EClientScript插件扩展实现css,js文件代码压缩合并加载功能.分享给大家供大家参考,具体如下: 扩展插件下载地址,解压后复制到/protected/vendor/ https://github.com/muayyad-alsadi/yii-EClientScript main配置文件配置插件,components里面增加 //js,css代码压缩,合并 'clientScript' => array( 'class' => 'application.ven

  • PHP实现简单ajax Loading加载功能示例

    本文实例讲述了PHP实现简单ajax Loading加载功能.分享给大家供大家参考,具体如下: var xmlHttp; function createXmlHttpReq() { if(window.ActiveXObject) { xmlHttp = new ActiveXObject('Microsoft.XMLHTTP'); } else if(window.XMLHttpRequest) { xmlHttp = new XMLHttpRequest(); } } function fu

  • Android Volley图片加载功能详解

    Gituhb项目 Volley源码中文注释项目我已经上传到github,欢迎大家fork和start. 为什么写这篇博客 本来文章是维护在github上的,但是我在分析ImageLoader源码过程中与到了一个问题,希望大家能帮助解答. Volley获取网络图片  本来想分析Universal Image Loader的源码,但是发现Volley已经实现了网络图片的加载功能.其实,网络图片的加载也是分几个步骤: 1. 获取网络图片的url. 2. 判断该url对应的图片是否有本地缓存. 3. 有

随机推荐