Unity异步加载AB包

news2024/11/25 22:34:09

Unity异步加载AB包

  • 写在前面
  • 效果
  • 关键讲解
  • 项目地址
  • 写在后面

写在前面

最近项目需要在Unity中完成一个非常耗时的工作,所以学习了下异步加载的流程,这里做了一个demo,异步加载AB包,其实异步加载场景等,原理差不多。

效果

在这里插入图片描述

关键讲解

主要就是在协程里使用AssetBundle.LoadFromFileAsync()异步加载AB包,

AssetBundleCreateRequest abcr = AssetBundle.LoadFromFileAsync(abPath);

其返回的AssetBundleCreateRequest abcr 有一个progress属性能够查看AB包加载进度,isDone属性能查看AB包是否加载完成,我们这里用Lerp平滑过度一下。这里之所以用slider.value<=0.99做条件而不用isDone是因为项目太小,一瞬间就加载完了。如果是大项目就用isDone

while (slider.value<=0.99) {
    //平滑过度
    slider.value = Mathf.Lerp(slider.value, abcr.progress, Time.deltaTime);
    text.text = (int)(slider.value * 100) + "%";
    yield return null;

最后加载图片即可,其实这里也可以用异步加载Asset,但是加载图片不耗时,我就用同步了。

Image[] images = display.GetComponentsInChildren<Image>();
for (int i = 0; i < images.Length; i++) {
    images[i].sprite = abcr.assetBundle.LoadAsset<Sprite>(abcr.assetBundle.GetAllAssetNames()[i]);
}

最后的最后卸载AB包,false是为了不写在场景中还在使用的AB包。Resources.UnloadUnusedAssets();是为了清理不用的资源。

abcr.assetBundle.Unload(false);
Resources.UnloadUnusedAssets();

完整代码

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class LoadManager : MonoBehaviour {
    
    public GameObject loadPlane;
    public Slider slider;
    public Text text;
    public GameObject display; 

    public void LoadImage() {
        StartCoroutine(Loading());
    }
    
    IEnumerator Loading() {
        loadPlane.SetActive(true);
        
        string abPath = Application.dataPath;
        abPath = abPath.Substring(0, abPath.Length - 6) + "ab"+"/image";
 
        AssetBundleCreateRequest abcr = AssetBundle.LoadFromFileAsync(abPath);
        
        while (slider.value<=0.99) {
            //平滑过度
            slider.value = Mathf.Lerp(slider.value, abcr.progress, Time.deltaTime);
            text.text = (int)(slider.value * 100) + "%";
            yield return null;
        }

        Image[] images = display.GetComponentsInChildren<Image>();
        for (int i = 0; i < images.Length; i++) {
            images[i].sprite = abcr.assetBundle.LoadAsset<Sprite>(abcr.assetBundle.GetAllAssetNames()[i]);
        }
        
        loadPlane.SetActive(false);
        abcr.assetBundle.Unload(false);
        Resources.UnloadUnusedAssets();
    }
}

项目地址

https://github.com/hahahappyboy/UnityProjects/tree/main/ABSyncLoad

写在后面

什么时候复刻可莉啊!!!
在这里插入图片描述

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

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

相关文章

Tomcat的Maven插件使用方法(在idea里面运行Tomcat)

目录 一、概述 二、下载和导入插件 三、测试使用方式 四、总结 一、概述 使用这个插件可以快速的运行Tomcat&#xff0c;比在本地配置快得多。 二、下载和导入插件 1.下载插件Maven Helper ps&#xff1a;已经有下载过这个插件的可以跳过此步骤 &#xff08;1&#xff…

一、导论——可解释性机器学习(DataWhale组队学习)

目录导言一、什么是可解释人工智能?二、学可解释机器学习有什么用?2.1学习可解释机器学习的原因2.2 Machine Teaching :人工智能教人类学习2.3 细粒度图像分类2.4前沿AI三、本身可解释性好的机器学习模型四、传统机器学习算法的可解释性分析五、卷积神经网络的可解释性分析5.…

前端基础(二)_HTML常用标签(块级标签、行级标签、行块级标签)

HTML常用标签 我们可以分为三类&#xff1a; 1.块级标签 2.行级标签 3.行块级标签 一、块级标签 1.1 h系类标签 标题标签 H1~h6 大到小 H1 在同一个页面中只能使用一次 其他标签可以重复 特点&#xff1a;默认宽度100% 高度自适应 独立成行 自带间距加粗 <body><…

java计算机毕业设计ssm制造型企业仓储管理系统i0180(附源码、数据库)

java计算机毕业设计ssm制造型企业仓储管理系统i0180&#xff08;附源码、数据库&#xff09; 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&…

[附源码]计算机毕业设计的项目管理系统Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; Springboot mybatis MavenVue等等组成&#xff0c;B/S模式…

基于小波变换的图像压缩解压缩的matlab仿真

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 图像压缩的类别 对于图像压缩&#xff0c;主要有两类方法&#xff1a;无损的图像压缩以及有损的图像压缩&#xff0c;分别称为lossless image compression and lossy image compression。 对于无…

[附源码]Node.js计算机毕业设计动漫网站Express

项目运行 环境配置&#xff1a; Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境&#xff1a;最好是Nodejs最新版&#xff0c;我…

第37篇 网络(七)TCP(一)

导语 TCP即TransmissionControl Protocol&#xff0c;传输控制协议。与UDP不同&#xff0c;它是面向连接和数据流的可靠传输协议。也就是说&#xff0c;它能使一台计算机上的数据无差错的发往网络上的其他计算机&#xff0c;所以当要传输大量数据时&#xff0c;我们选用TCP协议…

ssm+Vue计算机毕业设计校园生活服务预约管理系统(程序+LW文档)

ssmVue计算机毕业设计校园生活服务预约管理系统&#xff08;程序LW文档&#xff09; 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;…

spring切入点表达式(一)

前面写到切入点表达式&#xff0c;如果把全部方法都作为切入点的话&#xff0c;用execution(* *(..))表达式&#xff0c;这个表达式代表什么意思呢&#xff1f; public void login (String name,String address){} * * ( . . ) * *(..)对应方法如上图 * -------->代表修…

【GRU回归预测】基于鲸鱼算法优化门控循环单元WOA-GRU神经网络实现多输入单输出回归预测附matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

网络协议—应用层的HTTPS协议

用 HTTP 协议&#xff0c;看个新闻还没有问题&#xff0c;但是换到更加严肃的场景中&#xff0c;就存在很多的安全风险。例如&#xff0c;你要下单做一次支付&#xff0c;如果还是使用普通的 HTTP 协议&#xff0c;那你很可能会被黑客盯上。例如在点外卖的环境中&#xff0c;发…

面试题 —— 真实面试题分享

文章目录 一、对BFC的理解。二、CSS中”::“和”:”的区别&#xff1f;三、对vue生命周期的理解&#xff1f; 四、vue组件通信的方式 五、vue中给data中的对象添加一个新的属性会发生什么&#xff0c;如何解决? 六.微信小程序组件的生命周期 七、javascript原型与继承的理解…

【vue基础】关于组件之间的通信

目录 &#xff08;1&#xff09;父组件向子组件传递信息 1.props&#xff1a; 2.第二种是直接从子组件里面利用&#xffe5;parent和root引用&#xff0c;获取根组件和父组件中的数据 &#xff08;2&#xff09;子组件数据传入父组件 1.通过自定义事件 2.通过$refs引用集合…

Docker-自定义镜像上传阿里云

目录 一、Docker制作jdk镜像 jdkv.1.0的制作 步骤 二&#xff0c;alpine制作jdk镜像 2.1 alpine Linux简介 2.2 基于alpine制作JDK8镜像 前期准备 2.3步骤 2.3.1.下载镜像 2.3.2.创建并编辑dockerfile 2.3.3.执行dockerfile创建镜像 2.3.4.创建并启动容器(可略) 2.3.5.进…

考虑碳交易机制的园区综合能源系统电热协同运行优化研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️❤️&#x1f4a5;&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑…

【加油站会员管理小程序】05 充值套餐功能

上一篇我们讲解了轮播图的开发,本篇我们讲解充值优惠功能的开发。 开发之前我们要思考如何展示信息,在我们的功能规划里,在首页部分是要展示三个充值的套餐信息。那这个套餐呢最好是存在数据源中,便于日后维护信息。 在应用的编辑器里,点击数据源的图标,我们创建一个数…

m最小二乘法自适应均衡误码率仿真,对比LS,DEF以及LMMSE三种均衡算法误码率

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 信道估计是通信系统接收机的重要功能模块&#xff0c;主要是用来估计信号所经历信道的冲击响应&#xff0c;并用于后续的信道均衡处理&#xff0c;以便消除多径信号混叠造成的ISI。 信道估…

[附源码]Node.js计算机毕业设计二手车交易平台设计Express

项目运行 环境配置&#xff1a; Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境&#xff1a;最好是Nodejs最新版&#xff0c;我…

硕士生论文学习——基于孪生神经网络的改进模型在中文语义相似度上的研究

文章目录摘要2.2 孪生神经网络3.2 基于孪生ELETRA网络的语义相似度交互模型结构3.3 实验结果分析3.3.4 评价指标摘要 啥啊&#xff1a;两个文本之间的交互特征 LSTM 应用于孪生神经网络的特征提取层&#xff0c;可以获取到长文本的语义信息。 孪生神经网络的特征提取层&…