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

Unity-AB包

导入

PackageManager ——>Add ByName :"com.unity.assetbundlebrowser"

AssetBundleManager

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;public class AssetBundleManager : MonoSingleton<AssetBundleManager>
{//主包private AssetBundle abMain = null;//依赖信息的配置文件private AssetBundleManifest manifest = null;private Dictionary<string,AssetBundle> abDic = new Dictionary<string,AssetBundle>();//AB包存放路径,目前是在streamingAssets下private string pathURL{get{return Application.streamingAssetsPath + "/";}}//主包名private string abMainName{get{
#if UNITY_IOSreturn "IOS";
#elif UNITY_ANDROIDreturn "Android";
#elsereturn "PC";
#endif}}//同步加载(AB包不能重复加载)public Object LoadRes(string abName,string resName){LoadMainABPack();LoadDependences(abName);LoadTargetABPack(abName);//加载资源return abDic[abName].LoadAsset(resName);}private void LoadTargetABPack(string abName){//加载目标包if (!abDic.ContainsKey(abName)){AssetBundle abTarget = AssetBundle.LoadFromFile(pathURL + abName);abDic.Add(abName, abTarget);}}private void LoadDependences(string abName){//获取所有依赖信息string[] strs = manifest.GetAllDependencies(abName);if (strs.Length != 0){for (int i = 0; i < strs.Length; i++){//判断包是否被加载过if (!abDic.ContainsKey(strs[i])){AssetBundle ab = AssetBundle.LoadFromFile(pathURL + strs[i]);abDic.Add(strs[i], ab);}}}}private void LoadMainABPack(){if (abMain == null){abMain = AssetBundle.LoadFromFile(pathURL + abMainName);manifest = abMain.LoadAsset<AssetBundleManifest>("AssetBundleManifest");}}public T LoadRes<T>(string abName, string resName) where T : Object{LoadMainABPack();LoadDependences(abName);LoadTargetABPack(abName);//加载资源return abDic[abName].LoadAsset<T>(resName);}//异步加载public void LoadResAsync(string abName, string resName,UnityAction<Object> callBack){LoadMainABPack();LoadDependences(abName);LoadTargetABPack(abName);StartCoroutine(LoadResByAsync(abName, resName, callBack));}private IEnumerator LoadResByAsync(string abName, string resName, UnityAction<Object> callBack){AssetBundleRequest abr = abDic[abName].LoadAssetAsync(resName);yield return abr ;callBack.Invoke(abr.asset);}public void LoadResAsync<T>(string abName, string resName, UnityAction<T> callBack) where T : Object{LoadMainABPack();LoadDependences(abName);LoadTargetABPack(abName);StartCoroutine(LoadResByAsync<T>(abName, resName, callBack));}private IEnumerator LoadResByAsync<T>(string abName, string resName, UnityAction<T> callBack) where T:Object{AssetBundleRequest abr = abDic[abName].LoadAssetAsync<T>(resName); yield return abr;callBack.Invoke(abr.asset as T);}//单个包卸载public void UnLoad(string abName){if (abDic.ContainsKey(abName)){abDic[abName].Unload(false);abDic.Remove(abName);}}//所有包卸载public void UnLoad(){AssetBundle.UnloadAllAssetBundles(false);abDic.Clear();abMain = null;manifest = null;}
}

http://www.dtcms.com/a/418215.html

相关文章:

  • Rust开发环境配置
  • 【mdBook】5.2.1 通用配置
  • Rust自定义函数引用
  • Java 集合体系 —— List 篇
  • 操作系统应用开发(十一)RustDesk在线编译自己客户端——东方仙盟筑基期
  • 【mdBook】5.2 配置
  • 网站建设难么让网站快速收录
  • h5游戏网站建设游戏软件开发培训学校
  • 扩散模型-图像编辑【An Edit Friendly DDPM Noise Space: Inversion and Manipulations】
  • 开源 C# 快速开发(九)通讯--Tcp客户端
  • 大黄蜂云课堂vep格式加密视频录屏截图翻录转换为mp4
  • 【Python办公】批量图片转PDF工具
  • Python爬虫实战:获取北京市交管局最新车检信息与数据分析
  • ubuntu24.04 实现DLNA音频推送
  • 企业网站的建设规划网站建站前期准备工作
  • Docker搭建ESPIDF环境,程序下载
  • MQTT-物联网轻量级通信
  • eclipse复制项目后原项目名依然伴随值所复制的项目名
  • 微服务架构:从单机到分布式的革命性升级
  • 【ROS2学习笔记】话题通信篇:python话题订阅与发布
  • 【碎片化学习】SpringBoot服务的启动过程
  • 儿童网站模板 html做百度快照要先有网站吗
  • Games101 第六章 Shading(着色)
  • 电子电气架构 --- 智能座舱域环境感知和人机交互系统
  • 数字营销网站主页优化制作网页动画的软件
  • CSS详篇
  • Memblock-3
  • 大数据毕业设计选题推荐-基于大数据的全国饮品门店数据可视化分析系统-Hadoop-Spark-数据可视化-BigData
  • 【后端开发】golang部分中间件介绍(任务调度/服务治理/数据库/缓存/服务通信/流量治理)
  • 建设一个自己的网站需要多少钱站长统计官方网站