unity怎么知道一个场景是不是加载完成

author author     2023-04-10     434

关键词:

参考技术A 需要一个场景一个场景的加载,这时候可以使用 WWW 先通过 HTTP 加载场景到本地缓存,然后再使用 Application.LoadLevel 或者 Application.LoadLevelAsync 函数加载场景,使用这种加载方式,不仅不需要 Build Settings - Add Current 处理加载场景,进度条的显示也更加容易,但是使用这种方式,需要先把场景打包成 unity3d(查看详情) 或者 assetbundle(查看详情) 文件。

  1、先把测试场景搭建好,
  2、然后添加一个 C# 脚本,取名 Usewww.cs,全部代码如下:
  复制代码代码如下:
  using UnityEngine;
  using System.Collections;
  public class UseWww : MonoBehaviour
  
  public UISlider progressBar;
  public UILabel lblStatus;
  private WWW www;
  private string scenePath;
  void Awake()
  
  this.scenePath = "file:///" + Application.dataPath + "/Assets/MainScene.unity3d";
  // 开始加载场景
  this.StartCoroutine (this.BeginLoader ());
  
  void Update()
  
  if (this.www != null this.progressBar != null !this.www.isDone)
  
  // 更新进度
  this.progressBar.value = this.www.progress;
  
  
  private IEnumerator BeginLoader()
  
  this.lblStatus.text = "场景加载中,请稍候。。。";
  // 加载场景使用 www.LoadFromCacheOrDownload,函数,这样加载完成才能使用 Application.LoadLevel 或者 Application.LoadLevelAsync
  this.www = www.LoadFromCacheOrDownload (scenePath, Random.Range(0, 100));
  yield return this.www;
  if(!string.IsNullOrEmpty(this.www.error))
  
  this.lblStatus.text = "场景加载出错!";
  
  if (this.www.isDone)
  
  this.lblStatus.text = "场景正在初始化,请等待。。。";
  Application.LoadLevelAsync("MainScene");
  
  
  

  3、然后把这个脚本挂载到游戏场景的一个对象中,设置好相关属性,  
  4、运行游戏,可以查看进度条的加载情况,当加载完成,自动跳转到下一个场景中,
  5、因为前面封装了一个 WWW 加载管理器(查看详情),可以直接拿来使用,建立一个新的 C# 脚本,取名 UseWwwLoaderManager.cs,全部代码如下:

  复制代码代码如下:
  using UnityEngine;
  using System.Collections;
  public class UseWww : MonoBehaviour
  
  public UISlider progressBar;
  public UILabel lblStatus;
  private WWW www;
  private string scenePath;
  void Awake()
  
  this.scenePath = "file:///" + Application.dataPath + "/Assets/MainScene.unity3d";
  // 开始加载场景
  this.StartCoroutine (this.BeginLoader ());
  
  void Update()
  
  if (this.www != null this.progressBar != null !this.www.isDone)
  
  // 更新进度
  this.progressBar.value = this.www.progress;
  
  
  private IEnumerator BeginLoader()
  
  this.lblStatus.text = "场景加载中,请稍候。。。";
  // 加载场景使用 www.LoadFromCacheOrDownload,函数,这样加载完成才能使用 Application.LoadLevel 或者 Application.LoadLevelAsync
  this.www = www.LoadFromCacheOrDownload (scenePath, Random.Range(0, 100));
  yield return this.www;
  if(!string.IsNullOrEmpty(this.www.error))
  
  this.lblStatus.text = "场景加载出错!";
  
  if (this.www.isDone)
  
  this.lblStatus.text = "场景正在初始化,请等待。。。";
  Application.LoadLevelAsync("MainScene");
  
  
  
  6、然后把原先的脚本从场景移除,挂载这个新的脚本,运行游戏,可以看到与上面同样的加载效果。本回答被提问者采纳

unity进阶----assetbundle_03(2018/11/07)(代码片段)

...字否则是场景文件夹名称4.当我AB包从硬盘加载完成之后是不是就该加载到内存并实例化了?带有缓存的ab加载机制5.脚本不允许出现在打包目录的dll6.知道加载的过程说出来!这个很重要(依赖加载必须会 查看详情

unity异步加载场景(代码片段)

...景名称”);如果想要加载结束之后做一些逻辑处理的话该怎么做?我们可以看到,异步加载场景函数的返回值类型AsyncOperation中有一个event类型的成员。Event是事件类型,相当于一个更加安全的委托(这里可以把它... 查看详情

unity中使用代码将预制加载到场景(代码片段)

Unity中使用代码将预制加载到场景大家知道,在日常修改预制的时候很方便,我们将预制从资源文件夹往场景上"一拖",然后就可以进行修改,然后应用保存即可.但是如果某些需求下,我们想要使用代码来完成这个操作就比较麻烦... 查看详情

unity移动端怎么加载网络上的视频??

你要是要将网络视频嵌入到游戏场景里的画面,比如游戏场景里的电视机上,电视机还能旋转,那就比较麻烦了。说说原理:你们前面说的MMT插件是采用了YUV420P的格式转码到Unity里面,再用作者自己写的shader进行YUV分量的合成,... 查看详情

unity中加载大场景怎么解决

参考技术A可以先加载一部分,比如人物进入之后,能看到周围的东西,把这一部分定一个范围,然后后边动态加载,如果只是大东西不多,占用资源不多,加个loading就行了 查看详情

我怎么知道一个成就是不是在android中完成?

】我怎么知道一个成就是不是在android中完成?【英文标题】:HowcanIknowifanachievementiscompletedinandroid?我怎么知道一个成就是否在android中完成?【发布时间】:2018-09-2402:43:21【问题描述】:我正在开发一个有成就的安卓应用。是否... 查看详情

Unity 场景加载时间非常长

...我对Unity还很陌生,所以对IDE没有太多经验。我正在开发一个非常基本的应用程序、一个登录和一个带有一些基本UI元素的仪表板。我遇到的问题是当我尝试切换场景时。因此,从LoginScene到Dashboard场景最多可能需要20秒。脚本甚... 查看详情

加载新场景后Unity 5 NullReferenceException

...间】:2016-10-1208:29:31【问题描述】:所以我正在做我的第一个fps游戏,现在我正要从开始菜单转到我的第一个场景。当新场景加载时,清醒时,在我的暂停游戏脚本中,我设置了pauseMenu.SetActive(false)(它是一个画布, 查看详情

unity实现场景加载功能(代码片段)

...加载分为同步加载和异步加载;同步加载loadScene创建一个项目工程,然后创建三个场景loading00、loading01、loading02。每个场景分别创建一个cube、Sphere、Capsule。然后打开File->BuildSettings,然后将创建的loading00、loading01、loading... 查看详情

手把手教会你unity场景切换进度条制作(代码片段)

30秒教会你Unity场景切换进度条首先问一个问题:为什么要用进度条,以及什么情况下才用进度条呢?一、创建游戏场景及搭建面板UI二、添加代码(1)加载完成后进入场景完整代码(2)加载完成需要... 查看详情

unity3d教程unity3d创建项目教程

...向导)对话框中,单击CreateNewProject(新建项目),创建一个新的工程,可以设置工程的目录,然后修改文件名称和文件路径。2、新建项目:在Projectname下(项目名称)中输入项目名称,然后在Location(项目路径)下选择项目保存... 查看详情

unity从崩溃的实例恢复您的场景

...会经常崩溃。UnityAPI提供了我们开发巨大的自由,但代价是不是特别的稳定。如果Unity在你的项目身上崩溃了,而你却没有在一段时间里拯救你的场景,该怎么办?这很简单,但是在完成这些步骤之前,不要启动Unity3D。1 查看详情

我怎么知道nodetool修复是不是完成

】我怎么知道nodetool修复是不是完成【英文标题】:howdoiknowifnodetoolrepairisfinished我怎么知道nodetool修复是否完成【发布时间】:2014-09-2317:47:45【问题描述】:我有一个2节点apachecassandra(2.0.3)集群,rep因子为1。我在cqlsh中使用以下命... 查看详情

unity把新场景代码添加到构建并在加载场景时叠加场景

转自个人简书:2020.09.28完成把场景添加到构建,模仿了前人的经验,然后自己去改进了一下,场景用的是数组存,数组的长度不增加没法在后面通过索引去增加场景,也没有Add方法,只能取巧转List然后添加完转会数组添加到构... 查看详情

全面理解unity加载和内存管理

...,其实两者本质上我理解没有什么区别。Resources.Load就是从一个缺省打进程序包里的AssetBundle里加载资源,而一般AssetBundle文件需要你自己创建,运行时动态加载,可以指定路径和来源的。其实场景里所有静态的对象也有这么一个... 查看详情

unity3d怎样优化大场景模型

...大场景分成很多小场景。把地形跟建筑分开加载。比如有一个大场景,把他地形单独拿出来,分成比如10个小场景。然后把场景上的建筑用代码动态加载。当你进入第一个场景,加载跟第一个场景连接的第二个场景,当你快走到... 查看详情

unity_加载页面及进度条(代码片段)

...详解APIUnity场景异步加载(加载界面的实现)新建一个加载页面场景创建一个滑动条用来表示进度条 再创建一个文本用来显示进度百分比 位置随便摆一下创建一个空对象在空对象上新建挂载脚本 修改代码: 查看详情

unity3d怎么实现异步加载场景

参考技术AusingUnityEngine;usingSystem.Collections;usingUnityEngine.UI;usingUnityEngine.SceneManagement;///<summary>///挂载到camera上异步加载///</summary>publicclassARLoadingScr:MonoBehaviour///<summary>///滑动条提交回答///</summary>publicSliderprocessBar;pr... 查看详情