当前位置: 首页 > news >正文

unity打AB包,AssetBundle预制体与图集(二)

第二步:加载AB包的资源,用于显示

using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.U2D;
using UnityEngine.UI;public class GameLaunch : MonoBehaviour
{public Button Btn;public Button Btn2;private string bundlePath = "";private string bundlePath2 = "";public Transform Parent_;public Image IMG;void Start(){bundlePath =Path.Combine(Application.streamingAssetsPath + "/AB/","prefab_ui") ;bundlePath2 =Path.Combine(Application.streamingAssetsPath + "/AB/","prefab_altlas") ;Btn.onClick.AddListener(() =>{//加载资源// 同时启动两个异步加载过程StartCoroutine(LoadAssetBundlesAsync());});Btn2.onClick.AddListener(() =>{StartCoroutine(LoadAssetBundlesAsync2());});}IEnumerator LoadAssetBundlesAsync(){// 同时启动两个异步加载过程yield return StartCoroutine(LoadAssetBundleAsync(bundlePath2, "_图集_AB", "Atlas_One","ui_frame_fight"));}IEnumerator LoadAssetBundlesAsync2(){// 同时启动两个异步加载过程yield return StartCoroutine(LoadAssetBundleAsync(bundlePath, "_UI_AB", "Prefab_One"));}IEnumerator LoadAssetBundleAsync(string path, string debugMessage, string assetName, string spriteName = null){AssetBundleCreateRequest request = AssetBundle.LoadFromFileAsync(path);// 等待加载完成yield return request;var myLoadedAssetBundle = request.assetBundle;if (myLoadedAssetBundle == null){Debug.LogError("Failed to load AssetBundle: " + debugMessage);}else{Debug.Log(debugMessage + "加载完成");if (debugMessage == "_UI_AB"){if (!string.IsNullOrEmpty(assetName)){GameObject prefab = myLoadedAssetBundle.LoadAsset<GameObject>(assetName);GameObject Clone = Instantiate(prefab); //prefab中有Imgs图片.sprite 在spriteAtlas里面,编辑器加载的图片是正确的,但是APK加载的Imgs图片.sprite = spriteAtlas图集Clone.transform.SetParent(Parent_);Clone.transform.localPosition = Vector3.zero;}}else if (debugMessage == "_图集_AB"){//用于检测该AB包中拥有的所有资源,如Atlas_Oneobject[] allAssets = myLoadedAssetBundle.LoadAllAssets();foreach (var asset in allAssets){Debug.Log("Asset in bundle: " + asset);}if (!string.IsNullOrEmpty(assetName)){// 从 SpriteAtlas 中获取 SpriteSpriteAtlas spriteAtlas = myLoadedAssetBundle.LoadAsset<SpriteAtlas>(assetName);// 获取 SpriteAtlas 中的所有 Sprite// Sprite[] sprites = new Sprite[spriteAtlas.spriteCount];// spriteAtlas.GetSprites(sprites);Sprite Sp = spriteAtlas.GetSprite(spriteName);//编辑器与APK加载的话,图片显示全都没问题IMG.sprite = Sp;}}}}
}

在这里插入图片描述
运行,点击Btn1 ,可以加载图片ui_frame_fight
在这里插入图片描述
点击Btn2,可以创建预制体Prefab_One
在这里插入图片描述
一如既往,还有疑问,就直接在评论区问,我会尽快回复的

http://www.lryc.cn/news/220918.html

相关文章:

  • 【网络安全 --- web服务器解析漏洞】IIS,Apache,Nginx中间件常见解析漏洞
  • Python基础——注释、缩进、语法、标识符、关键字
  • 排序算法的分析及实现
  • rancher或者其他容器平台使用非root用户启动jar
  • Scrapy使用和学习笔记
  • <sa8650> sa8650介绍
  • [架构之路-244]:目标系统 - 设计方法 - 软件工程 - 软件开发方法:结构化、面向对象、面向服务、面向组件的开发方法
  • Qt窗体自动销毁
  • 制造业企业设备管理常见的三个问题及对应的解决方案
  • linux文件目录
  • 流量卡是什么?流量卡为什么有虚量,51物联卡带你全面了解一下。
  • 浅谈电力物联网时代物联网技术在电力系统中的应用
  • HTTP 状态代码 (Winhttp.h)
  • 开槌在即:陈可之油画|《赞红梅》
  • C++内存分配 new 和 delete
  • 蓝桥云课--1014 第 1 场算法双周赛
  • 管理类联考——写作——技巧篇——书写标点符号使用要求规范文档
  • 快速解决mfc140u.dll丢失问题,找不到mfc140u.dll修复方法分享
  • 福建地区等保测评怎么做
  • mysql数据库的备份和恢复
  • 动态IP和静态IP哪个安全,该怎么选择
  • linux复习笔记03(小滴课堂)
  • webgoat-Broken Access ControlI 访问控制失效
  • Beaustiful Soup爬虫案例
  • 【Redis】Redis与SSM整合Redis注解式缓存Redis解决缓存问题
  • 谈一谈SQLite、MySQL、PostgreSQL三大数据库
  • 【微软技术栈】C#.NET 中的本地化
  • 【qemu逃逸】华为云2021-qemu_zzz
  • vue递归获取树形菜单
  • [ubuntu]ubuntu22.04默认源和国内源