Unity基础 异步加载场景

news/2024/11/8 16:46:55/

异步加载场景的基本概念

在Unity中,异步加载场景是指在游戏运行时,将场景中的资源分批次加载到内存中,以便提高游戏的加载速度和性能。通常情况下,加载场景的过程会在主线程中执行,而异步加载场景可以在后台线程中执行,从而不会阻塞主线程。

要使用异步加载首先我们要了解协程,不太清楚的同学可以点击这

了解了协程后我们我需要知道AsyncOperation这个类,它用于管理需要在后台执行的任务,首先我们介绍一下它的重要属性

isDone

isDone属性表示异步操作是否已完成。当场景加载完成时,AsyncOperation对象的isDone属性将返回true。 

AsyncOperation asyncOperation = SceneManager.LoadSceneAsync("MyScene");
while (!asyncOperation.isDone)
{yield return null;
}
//当isDone加载完成时场景跳转

progress

progress属性表示异步操作的度。该进属性返回一个在0和1之间的浮点数,表示操作已经完成的比例。

AsyncOperation asyncOperation = SceneManager.LoadSceneAsync("MyScene");
while (!asyncOperation.isDone)
{//显示当前进度Debug.Log("当前进度: " + asyncOperation.progress * 100 + "%");yield return null;
} 

allowSceneActivation

allowSceneActivation属性表示当场景加载完成后,是否立即激活该场景。

AsyncOperation asyncOperation = SceneManager.LoadSceneAsync("MyScene");
//当=true的时候,场景加载完毕后会直接接跳转,当=false时,加载完毕后不会跳转,需要设置为true才会跳转
asyncOperation.allowSceneActivation = true;
while (!asyncOperation.isDone)
{yield return null;
}
Debug.Log("场景加载完毕后跳转!"); 

completed

completed属性是一个异步操作完成时的回调函数。当异步操作完成时,该回调函数将被调用。我们可以使用该属性来指定异步操作完成后要执行的代码。 

AsyncOperation asyncOperation = SceneManager.LoadSceneAsync("MyScene");
asyncOperation.completed += operation =>
{Debug.Log("场景加载完成后执行的操作");
}; 

异步加载场景的示例代码

下面是一个简单的示例代码,演示了如何在Unity中异步加载场景: 

using System.Collections;
using UnityEngine;
using UnityEngine.SceneManagement;public class LoadSceneAsync : MonoBehaviour
{public string sceneName;//异步加载对象private AsyncOperation asyncLoad;void Start(){StartCoroutine(LoadScene());}IEnumerator LoadScene(){//获取加载对象asyncLoad = SceneManager.LoadSceneAsync(sceneName);//设置加载完成后不跳转asyncLoad.allowSceneActivation = false;while (!asyncLoad.isDone){//输出加载进度Debug.Log(asyncLoad.progress);//进度.百分之九十后进行操作,当进度为百分之90其实已经完成了大部分的工作,就可以进行下面的逻辑处理了if (asyncLoad.progress >= 0.9f){asyncLoad.allowSceneActivation = true;}yield return null;}}
} 


http://www.ppmy.cn/news/82201.html

相关文章

首站中科院!百度商业AI技术创新大赛开启巡回宣讲

近日,百度商业AI技术创新大赛正式启动,并于5月18日起开启高校巡回宣讲。 宣讲会首站落地中国科学院大学,中国科学院大学人工智能学院副院长、教授、博士生导师肖俊教授,百度商业研发主任架构师焦学武,百度商业资深工程…

redo log

redo log 属于Innodb存储引擎的 大小是固定的,循环写,MySQL启动的时候,就申请了一段连续的内存空间。可以类比成一个环形。 所以,redo log 保存的不是全量的日志,所以不小心整个数据库的数据被删除了,不能使…

009、实例连接访问控制

实例连接访问控制 1、实例连接访问控制概述2、pg_hba.conf文件3、名单格式4、pg_hba.conf 示例:5、当有重复或者冲突的时候1、实例连接访问控制概述 • 实例访问控制就像是一道防火墙,用它来控制来自于不同主机、不同用户是否 允许访问指定的数据库、以及验证方式。 2、pg…

LeetCode 84 柱状图中最大的矩形

题目: 给定n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。 求在该柱状图中,能够勾勒出来的矩形的最大面积。 示例 1: 输入:heights [2,1,5,6,2,3] 输出:10 解释&#xf…

小红书数据分析:首播卖6亿,小红书直播开启新纪元!

5月22日,章小蕙在小红书开启了第一场带货直播。继董洁之后,小红书又迎来一位超级带货KOL。 据千瓜数据显示,相关话题#章小蕙小红书直播#上线不到30天,话题浏览量就高达2814.89万,笔记互动量达22.24万。 图 | 千瓜数据…

使用nsenter检查docker网络

文章目录 一 环境准备二 需求三 解决 一 环境准备 虚拟机IP:10.0.0.100 拉取的三个镜像,镜像名称与ID如下: [rootcanway01 ~]# docker image ls REPOSITORY TAG IMAGE ID CREATED …

设计模式 (1) 入门

目录 设计模式系列文章主要包含 1.什么是设计模式? 2.设计模式的分类 2.1 创建型设计模式 2.2 结构型设计模式 2.3 行为型设计模式 设计模式系列文章主要包含 设计模式 (一) 入门 设计模式 (二) 创建型设计模式系列 设计模式 (三) 结构型设计模式系列 …