unity3d————Resources异步加载

知识点一:Resources异步加载是什么?

在Unity中,资源加载可以分为同步加载和异步加载两种方式。同步加载会在主线程中直接进行,如果加载的资源过大,可能会导致程序卡顿,因为从硬盘读取数据到内存并进行处理是需要时间的。而异步加载则是Unity内部新开一个线程进行资源加载,这样就不会造成主线程卡顿,从而提高应用的响应性和流畅性。

知识点二:Resources异步加载方法

1. 通过异步加载中的完成事件监听使用加载的资源
  • 方法:使用Resources.LoadAsync<T>()方法进行异步加载,并通过监听completed事件来获取加载完成的通知。
  • 示例
    ResourceRequest rq = Resources.LoadAsync<Texture>("Tex/TestJPG");
    rq.completed += LoadOver; // 注册完成事件
  • 注意:异步加载不能马上得到加载的资源,至少要等一帧。因此,在completed事件触发之前尝试访问rq.asset是错误的。
2. 通过协程使用加载的资源
  • 方法:在协程中使用Resources.LoadAsync<T>()方法,并通过yield return语句等待资源加载完成。
  • 示例
    IEnumerator Load()
    {
    ResourceRequest rq = Resources.LoadAsync<Texture>("Tex/TestJPG");
    yield return rq; // 等待资源加载完成
    tex = rq.asset as Texture; // 获取加载的资源
    }
  • 优点:协程允许在加载资源的同时处理其他逻辑,如更新进度条或同时加载多个资源。
  • 缺点:写法相对复杂一些。

代码讲解

1.通过完成事件监听使用加载的资源(线程方式)
    private Texture tex; // 声明一个Texture变量用于存储加载的资源    void Start(){// 使用Resources.LoadAsync<T>()方法进行异步加载ResourceRequest rq = Resources.LoadAsync<Texture>("bk");// 注册完成事件,当加载结束时调用LoadOver方法rq.completed += LoadOver;print(Time.frameCount);}// 完成事件的回调函数private void LoadOver(AsyncOperation operation){// 获取加载的资源tex = (operation as ResourceRequest).asset as Texture;// 输出加载完成的通知和当前帧数print("加载结束");print(Time.frameCount);}private void OnGUI(){// 在GUI中绘制加载的纹理if (tex != null)GUI.DrawTexture(new Rect(0, 0, 100, 100), tex);}
 2.通过协程使用加载的资源(协程方式)
private Texture tex; // 声明一个Texture变量用于存储加载的资源void Start(){// 使用协程进行异步加载StartCoroutine(Load());}IEnumerator Load(){// 使用Resources.LoadAsync<T>()方法进行异步加载ResourceRequest rq = Resources.LoadAsync<Texture>("bk");// 输出当前帧数以观察异步加载的效果print(Time.frameCount);// 等待资源加载完成yield return rq;// 输出加载完成的通知和当前帧数print(Time.frameCount);// 获取加载的资源tex = rq.asset as Texture;// 这里可以添加额外的逻辑,如更新UI或处理加载后的资源}private void OnGUI(){// 在GUI中绘制加载的纹理if (tex != null)GUI.DrawTexture(new Rect(0, 0, 100, 100), tex);}
结果:

                                           

总结

  • 异步加载:通过新开线程进行资源加载,避免主线程卡顿。
  • 完成事件监听:写法简单,但只能在资源加载结束后进行处理。
  • 协程异步加载:允许在加载资源的同时处理其他逻辑,写法相对复杂。
  • 注意:异步加载不能马上得到加载的资源,需要等待加载完成。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/886271.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

fatal error C1083: 无法打开包括文件: “stdio.h”: No such file or directory

在 Windows 上的 “终端” 里&#xff0c;对于已经执行过 cmake -S . -B build -G Ninja 的工程&#xff0c;执行了 cmake --build build出现了报错&#xff1a; fatal error C1083: 无法打开包括文件: “stdio.h”: No such file or directory 原因是&#xff0c;当前 “终端…

SpringBoot开发——Spring Boot 3.3整合RabbitMQ构建高效稳定的消息队列系统

文章目录 一、配置 RabbitMQ二、自动配置的核心组件三、发送消息至指定 Stream四、接收消息与 RabbitListener 注解五、实现自定义 RabbitListenerContainerFactory六、消息重试机制七、总 结 消息队列在分布式系统中起着至关重要的作用&#xff0c;它能够解耦系统、削峰填谷&a…

SpringBoot+Vue3实现数据可视化大屏

前端工程的地址:UserManagerFront: 数据可视化前端 (gitee.com) 效果展示&#xff0c;可以展现出来了&#xff0c;样式可能还有一些丑。 后端代码 后端主要是拿到数据并对数据进行处理&#xff0c;按照前端需要的格式进行返回即可。 import com.njitzx.entity.Student; impor…

vue3: toRef, reactive, toRefs, toRaw

vue3&#xff1a; toRef, reactive, toRefs, toRaw 扫码或者点击文字后台提问 <template><div>{{ man }}</div><hr><!-- <div>{{ name }}--{{ age }}--{{ like }}</div> --><div><button click"change">修…

CDH安装与配置及相关大数据组件实践

CDH安装与配置及相关大数据组件实践 一、CDH 介绍 CDH&#xff08;Cloudera’s Distribution Including Apache Hadoop&#xff09;是一个基于 Web 用户界面的大数据平台版本。它支持大多数 Hadoop 组件&#xff0c;包括 HDFS、MapReduce、Hive、Pig、HBase、Zookeeper、Sqoo…

《网络硬件设备完全技术宝典》

《网络硬件设备完全技术宝典》 网卡 集线器 交换机 路由器 双绞线 光缆 无线接入点AP 交换机技术与选择策略 冗余链路技术 由于物理链路和网络模块的损坏都将导致网络链路的失败&#xff0c;因此两个设备之间&#xff0c;特别是核心交换机与汇聚交换机之间的单链路…

Day46 | 动态规划 :线性DP 最长递增子序列最长连续递增子序列

Day46 | 动态规划 &#xff1a;线性DP 最长递增子序列&&最长连续递增子序列 动态规划应该如何学习&#xff1f;-CSDN博客 本次题解参考自灵神的做法&#xff0c;大家也多多支持灵神的题解 最长递增子序列【基础算法精讲 20】_哔哩哔哩_bilibili 动态规划学习&#…

Win10下使用Anaconda安装GPU版本PyTorch

PyTorch是一个开源机器学习框架&#xff0c;最初来自Meta Ai。如果你想研究人工智能或从事人工智能项目方面的工作&#xff0c;那么在本地机器上使用PyTorch设置开发环境对于许多项目来说都是必不可少的。GPU&#xff08;图形处理单元&#xff09;是一种专用处理器&#xff0c;…

灰狼优化算法

灰狼优化算法&#xff08;Grey Wolf Optimizer&#xff0c;GWO&#xff09;是一种群智能优化算法&#xff0c;由澳大利亚格里菲斯大学学者Mirjalili等人于2014年提出。该算法灵感来源于灰狼群体的捕食行为&#xff0c;通过模拟灰狼的社会等级分层、跟踪、包围和攻击猎物等步骤来…

Chromium 中sqlite数据库操作演示c++

本文主要演示sqlite数据库 增删改查创建数据库以及数据库表的基本操作&#xff0c;仅供学习参考。 一、sqlite数据库操作类封装&#xff1a; sql\database.h sql\database.cc // Copyright 2012 The Chromium Authors // Use of this source code is governed by a BSD-sty…

java中BigInteger类和BigDecimal类

目录 BigInteger类构造方法用构造方法创建对象BigInteger的四则运算(只能是整数)加法(add方法)减法(subtract方法)乘法(multiply方法)除法(divide方法) BigDecimal类构造方法用构造方法创建对象BigDecimal的四则运算加法(add方法)减法(subtract方法)乘法(multiply方法)乘法(div…

Docker部署Kafka集群,增加 SASL_SSL认证,并集成到Spring Boot,无Zookeeper版

1&#xff0c;准备好Kafka 镜像包&#xff1a; bitnami/kafka:3.9.0 镜像资源包 2&#xff0c;准备好kafka.keystore.jks 和 kafka.truststore.jks证书 具体操作可参考&#xff1a; Docker部署Kafka SASL_SSL认证&#xff0c;并集成到Spring Boot-CSDN博客 3&#xff0c;配置…

微信小程序点击跳转打电话功能

wx.makePhoneCall 属性类型默认值必填说明phoneNumberstring是需要拨打的电话号码successfunction否接口调用成功的回调函数failfunction否接口调用失败的回调函数completefunction否接口调用结束的回调函数&#xff08;调用成功、失败都会执行&#xff09; <view class&q…

apipost下载安装教程、脚本详细使用教程

目录 apipost脚本使用教程 缘由&#xff1a; 实现流程&#xff1a; 1、设置接口需要的URL&#xff1a; 2、boby: 3、预执行操作&#xff1a; 4、断言 5、执行结果&#xff1a; 什么是ApiPost&#xff1f; 下载以及安装&#xff1a; apipost使用文档介绍&#xff1a;…

Python Web 应用开发基础知识

Python Web 应用开发基础知识 引言 随着互联网的快速发展&#xff0c;Web 应用程序的需求日益增加。Python 作为一种简单易学且功能强大的编程语言&#xff0c;已经成为 Web 开发中广受欢迎的选择之一。本文将深入探讨 Python Web 开发的基础知识&#xff0c;包括常用框架、基…

SpringBoot多环境+docker集成企业微信会话存档sdk

SpringBoot多环境docker集成企业微信会话存档sdk 文章来自于 https://developer.work.weixin.qq.com/community/article/detail?content_id16529801754907176021 SpringBoot多环境docker集成企业微信会话存档sdk 对于现在基本流行的springboot环境&#xff0c;官方文档真是比…

在openi平台 基于华为顶级深度计算平台 openmind 动手实践

大家可能一直疑问&#xff0c;到底大模型在哪里有用。 本人从事的大模型有几个方向的业务。 基于生成式语言模型的海事航行警告结构化解析。 基于生成式语言模型的航空航行警告结构化解析。 基于生成式生物序列&#xff08;蛋白质、有机物、rna、dna、mrna&#xff09;的多模态…

Android CALL按键同步切换通话界面上免提和听筒的图标显示

按一下call按键,进行切换图标,分别显示为免提和听筒模式! /frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java case KeyEvent.KEYCODE_CALL: { //*/ add custom key. if("com.freeme.factory.in…

【论文分享】基于街景图像识别和深度学习的针对不同移动能力老年人的街道步行可达性研究——以南京成贤街社区为例

全球老龄化趋势加剧, 许多城市中老年人数量不断增加&#xff0c;而现有街道和社区基础设施往往未能满足其步行安全和便利需求。本次我们给大家带来一篇SCI论文的全文翻译&#xff0c;该论文通过探讨不同步行能力的老年人对城市步行环境的需求&#xff0c;提供了关于如何改善城市…

Android Osmdroid + 天地图 (二)

Osmdroid 天地图 &#xff08;二&#xff09; 前言正文一、定位监听二、改变地图中心三、添加Marker四、地图点击五、其他配置① 缩放控件② Marker更换图标③ 添加比例尺④ 添加指南针⑤ 添加经纬度网格线⑥ 启用旋转手势⑦ 添加小地图 六、源码 前言 上一篇中我们显示了地图…