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

dw制作一个手机网站模板简洁型网页

dw制作一个手机网站模板,简洁型网页,宛城区网站建设,莘县网站建设电话目录 前言 AB包是什么 AB包有什么作用 1.相对Resources下的资源AB包更好管理资源 2.减小包体大小 3.热更新 官方提供的打包工具:Asset Bundle Browser AB包资源加载 AB包资源管理模块代码 前言 在现代游戏开发中#xff0c;资源管理是一项至关重要的任务。随着游戏内容…目录 前言 AB包是什么 AB包有什么作用 1.相对Resources下的资源AB包更好管理资源 2.减小包体大小 3.热更新 官方提供的打包工具:Asset Bundle Browser AB包资源加载 AB包资源管理模块代码 前言 在现代游戏开发中资源管理是一项至关重要的任务。随着游戏内容的日益丰富和复杂如何高效地加载、管理和卸载游戏资源成为了开发者们必须面对的挑战。Unity作为一款广泛使用的游戏引擎提供了一套强大的资源管理方案——AssetBundles简称AB包。 AB包是什么 特定于平台的资产压缩包有点类似压缩文件 资产包括:模型、贴图、预设体、音效、材质球等等 AB包有什么作用 1.相对Resources下的资源AB包更好管理资源 2.减小包体大小 1.压缩资源 2.减少初始包大小 3.热更新 资源热更新 脚本热更新 官方提供的打包工具:Asset Bundle Browser 将以下脚本放置在Editor文件夹中 using UnityEditor; using UnityEngine;public class CreateAssetBundles {[MenuItem(Assets/Build AssetBundles)]static void BuildAllAssetBundles(){string assetBundleDirectory Assets/AssetBundles;if (!System.IO.Directory.Exists(assetBundleDirectory)){System.IO.Directory.CreateDirectory(assetBundleDirectory);}BuildPipeline.BuildAssetBundles(assetBundleDirectory, BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows);} } 创建AB包选中资源在Asset Bundle里选择New 我这里取名为icon 点击Asset/Build AssetBundles 这样就会在AssetBundles文件夹里生成一些资源文件 AB包文件资源文件 manifest文件AB包文件信息当加载时提供了关键信息资源信息依赖关系版本信息等等 关键AB包(和目录名一样的包)主包AB包依赖关键信息 AB包资源加载 将脚本挂载到Image上启动项目资源会从ab包中加载到sprite上 using UnityEngine; using UnityEngine.UI;public class ABTest : MonoBehaviour {// Start is called once before the first execution of Update after the MonoBehaviour is createdvoid Start(){//第一步 加载 AB包AssetBundle ab AssetBundle.LoadFromFile(Assets/AssetBundles/icon);//第二步 加载 AB包中的资源//只是用名字加载 会出现 同名不同类型资源 分不清//建议用泛型或Type指定类型Sprite icon ab.LoadAsset(item_0, typeof(Sprite)) as Sprite;GetComponentImage().sprite icon;}// Update is called once per framevoid Update(){} }协程加载 using System.Collections; using UnityEngine; using UnityEngine.UI;public class ABTest : MonoBehaviour {// Start is called once before the first execution of Update after the MonoBehaviour is createdvoid Start(){StartCoroutine(LoadABRes(item_0));}IEnumerator LoadABRes(string resName){AssetBundleCreateRequest abcr AssetBundle.LoadFromFileAsync(Assets/AssetBundles/icon);yield return abcr;//加载资源AssetBundleRequest abq abcr.assetBundle.LoadAssetAsync(resName,typeof(Sprite));yield return null;GetComponentImage().sprite abq.asset as Sprite;}}卸载AB包 //卸载所有加载的AB包 参数为ture 会把通过AB包加载的资源也卸载了AssetBundle.UnloadAllAssetBundles(false); 关于AB包的依赖一个资源身上用到了别的AB包中的资源这个时候如果只加载自己的AB包通过它创建对象会出现资源丢失的情况这种时候 需要把依赖包 一起加载了 才能正常。 依赖包的固定写法 using System.Collections; using UnityEngine; using UnityEngine.UI;public class ABTest : MonoBehaviour {// Start is called once before the first execution of Update after the MonoBehaviour is createdvoid Start(){//第一步 加载 AB包AssetBundle ab AssetBundle.LoadFromFile(AB包文件路径);//依赖包的关键知识点一利用主包 获取依赖信息//加载主包AssetBundle abMain AssetBundle.LoadFromFile(主包文件路径);//加载主包中的固定文件AssetBundleManifest abManifest abMain.LoadAssetAssetBundleManifest (AssetBundleManifest);//从固定文件中 得到依赖信息string[] strs abManifest.GetAllDependencies(AB包名);for (int i 0; i strs.Length; i) {AssetBundle.LoadFromFile(前置路径/ strs[i]);}}}AB包资源管理模块代码 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Events;public class ABMgr : MonoBehaviour {private static ABMgr instance;public static ABMgr GetInstance(){if (instance null){GameObject obj new GameObject();//设置对象的名字为脚本obj.name typeof(GameObject).ToString();instance obj.AddComponentABMgr();}return instance;}//主包private AssetBundle mainAB null;//主包依赖获取配置文件private AssetBundleManifest manifest null;//选择存储 AB包的容器//AB包不能够重复加载 否则会报错//字典知识 用来存储 AB包对象private Dictionarystring, AssetBundle abDic new Dictionarystring, AssetBundle();/// summary/// 获取AB包加载路径/// /summaryprivate string PathUrl{get{return Application.streamingAssetsPath /;}}/// summary/// 主包名 根据平台不同 报名不同/// /summaryprivate string MainName{get{ #if UNITY_IOSreturn IOS; #elif UNITY_ANDROIDreturn Android; #elsereturn PC; #endif}}/// summary/// 加载主包 和 配置文件/// 因为加载所有包是 都得判断 通过它才能得到依赖信息/// 所以写一个方法/// /summaryprivate void LoadMainAB(){if (mainAB null){mainAB AssetBundle.LoadFromFile(PathUrl MainName);manifest mainAB.LoadAssetAssetBundleManifest(AssetBundleManifest);}}/// summary/// 加载指定包的依赖包/// /summary/// param nameabName/paramprivate void LoadDependencies(string abName){//加载主包LoadMainAB();//获取依赖包string[] strs manifest.GetAllDependencies(abName);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);}}}/// summary/// 泛型资源同步加载/// /summary/// typeparam nameT/typeparam/// param nameabName/param/// param nameresName/param/// returns/returnspublic T LoadResT(string abName, string resName) where T : Object{//加载依赖包LoadDependencies(abName);//加载目标包if (!abDic.ContainsKey(abName)){AssetBundle ab AssetBundle.LoadFromFile(PathUrl abName);abDic.Add(abName, ab);}//得到加载出来的资源T obj abDic[abName].LoadAssetT(resName);//如果是GameObject 因为GameObject 100%都是需要实例化的//所以我们直接实例化if (obj is GameObject)return Instantiate(obj);elsereturn obj;}/// summary/// Type同步加载指定资源/// /summary/// param nameabName/param/// param nameresName/param/// param nametype/param/// returns/returnspublic Object LoadRes(string abName, string resName, System.Type type){//加载依赖包LoadDependencies(abName);//加载目标包if (!abDic.ContainsKey(abName)){AssetBundle ab AssetBundle.LoadFromFile(PathUrl abName);abDic.Add(abName, ab);}//得到加载出来的资源Object obj abDic[abName].LoadAsset(resName, type);//如果是GameObject 因为GameObject 100%都是需要实例化的//所以我们直接实例化if (obj is GameObject)return Instantiate(obj);elsereturn obj;}/// summary/// 名字 同步加载指定资源/// /summary/// param nameabName/param/// param nameresName/param/// returns/returnspublic Object LoadRes(string abName, string resName){//加载依赖包LoadDependencies(abName);//加载目标包if (!abDic.ContainsKey(abName)){AssetBundle ab AssetBundle.LoadFromFile(PathUrl abName);abDic.Add(abName, ab);}//得到加载出来的资源Object obj abDic[abName].LoadAsset(resName);//如果是GameObject 因为GameObject 100%都是需要实例化的//所以我们直接实例化if (obj is GameObject)return Instantiate(obj);elsereturn obj;}/// summary/// 泛型异步加载资源/// /summary/// typeparam nameT/typeparam/// param nameabName/param/// param nameresName/param/// param namecallBack/parampublic void LoadResAsyncT(string abName, string resName, UnityActionT callBack) where T : Object{StartCoroutine(ReallyLoadResAsyncT(abName, resName, callBack));}//正儿八经的 协程函数private IEnumerator ReallyLoadResAsyncT(string abName, string resName, UnityActionT callBack) where T : Object{//加载依赖包LoadDependencies(abName);//加载目标包if (!abDic.ContainsKey(abName)){AssetBundle ab AssetBundle.LoadFromFile(PathUrl abName);abDic.Add(abName, ab);}//异步加载包中资源AssetBundleRequest abq abDic[abName].LoadAssetAsyncT(resName);yield return abq;if (abq.asset is GameObject)callBack(Instantiate(abq.asset) as T);elsecallBack(abq.asset as T);}/// summary/// Type异步加载资源/// /summary/// param nameabName/param/// param nameresName/param/// param nametype/param/// param namecallBack/parampublic void LoadResAsync(string abName, string resName, System.Type type, UnityActionObject callBack){StartCoroutine(ReallyLoadResAsync(abName, resName, type, callBack));}private IEnumerator ReallyLoadResAsync(string abName, string resName, System.Type type, UnityActionObject callBack){//加载依赖包LoadDependencies(abName);//加载目标包if (!abDic.ContainsKey(abName)){AssetBundle ab AssetBundle.LoadFromFile(PathUrl abName);abDic.Add(abName, ab);}//异步加载包中资源AssetBundleRequest abq abDic[abName].LoadAssetAsync(resName, type);yield return abq;if (abq.asset is GameObject)callBack(Instantiate(abq.asset));elsecallBack(abq.asset);}/// summary/// 名字 异步加载 指定资源/// /summary/// param nameabName/param/// param nameresName/param/// param namecallBack/parampublic void LoadResAsync(string abName, string resName, UnityActionObject callBack){StartCoroutine(ReallyLoadResAsync(abName, resName, callBack));}private IEnumerator ReallyLoadResAsync(string abName, string resName, UnityActionObject callBack){//加载依赖包LoadDependencies(abName);//加载目标包if (!abDic.ContainsKey(abName)){AssetBundle ab AssetBundle.LoadFromFile(PathUrl abName);abDic.Add(abName, ab);}//异步加载包中资源AssetBundleRequest abq abDic[abName].LoadAssetAsync(resName);yield return abq;if (abq.asset is GameObject)callBack(Instantiate(abq.asset));elsecallBack(abq.asset);}//卸载AB包的方法public void UnLoadAB(string name){if (abDic.ContainsKey(name)){abDic[name].Unload(false);abDic.Remove(name);}}//清空AB包的方法public void ClearAB(){AssetBundle.UnloadAllAssetBundles(false);abDic.Clear();//卸载主包mainAB null;} }
http://www.hkea.cn/news/14378647/

相关文章:

  • 揭阳网站设计公司民宿网站的建设
  • 网站多语言包山东省建设厅的网站
  • 网站建设明薇通网络售后好网络营销就是建立企业网站
  • 佛山 两学一做 网站成都企业网站设计服务商
  • 2018年做返利网站环保网站可以做哪些方面
  • 网站规划的原则如何开一家网站建设公司?
  • 福建路桥建设有限公司网站如何安装wordpress博客
  • 青岛菜西有做网站的吗深圳公司排名前100名
  • 南阳做网站的公司中国纵横168网站建设系统
  • 网站浏览器兼容性问题做网站搭建需要什么人
  • 安徽省途顺建设工程有限公司网站网页版微信登录提示二维码已失效
  • 网站开发方案服装网站简介网店运营工资一般多少
  • 专门做礼品的网站广西壮族自治区建设厅网站
  • 自适应网站的优劣有网址吗给个谢谢急贴吧
  • 网站建设鼠标点击变色怎么弄徐州建设工程网官网
  • 珠宝首饰网站开发三河建设局网站
  • 免费网站自己做wordpress reset
  • 芜湖哪里做网站网络工程师主要做什么
  • 手机能访问asp网站网站设计优化
  • 东莞网站建设aj博客赣州网络
  • 网店装修视频seo运营是什么
  • 门户类网站开发多少钱大连网络运营
  • wordpress开发文档下载云南seo刷关键词排名优化
  • 做拍卖网站有哪些wordpress动态图片
  • 网站建设的图片网络推广教程
  • 阿里能帮做网站吗惠通网站建设
  • 石家庄网站建设电商制作公司网站流程
  • 做网站好wordpress 模版标签
  • 合肥网站制作公司有哪些公司中国最厉害的网站建设公司
  • wordpress 多层分类徐州低价seo