[1]尝试用Unity3d制作一个王者荣耀(持续更新)-AssetBundle管理器
如果已经看过本章节:目录传送门:这是目录鸭~
1.AssetBundleManager:
首先我们创建一个文件夹,叫AssetBundleManager,再创建Csharp(即C#)脚本,名为AssetBundleManager(这个代码是作为我们管理AB包的基类)。以下是代码(详细注释啦~,这个代码后面可能会经常改动):
1 /* 2 * 编辑者:Miku酱 3 * 版本:1 4 * 首次编写日期:2019/09/14 21:00 5 * 修改日期:2019/09/14 21:00 6 * 强行加一行~~~ 7 */ 8 9 using System.Collections; 10 using System.Collections.Generic; 11 using UnityEngine; 12 13 namespace LuoHao.AssetBundleManager//命名空间,可以自己定义,我的格式是 名字拼音.功能名字; 14 { 15 /// <summary> 16 /// AB包管理基类 17 /// </summary> 18 public class AssetBundleManager : MonoBehaviour 19 { 20 #region 公共变量 21 22 /// <summary> 23 /// AB包根路径(尾部已带斜杠) 24 /// </summary> 25 public static string _assetBundleRootPath = Application.streamingAssetsPath+"/AssetBundles/"; 26 27 #endregion 28 #region 私有变量 29 /// <summary> 30 /// 临时存放AB包类的字典 31 /// </summary> 32 private static Dictionary<string,PackageForAssetBundle> _tempAssetBundles = new Dictionary<string, PackageForAssetBundle>(); 33 #endregion 34 /// <summary> 35 /// 根据路径取得AB包 36 /// </summary> 37 /// <param name="path">路径</param> 38 /// <returns>返回类(失败返回null)</returns> 39 public static PackageForAssetBundle GetAssetBundle(string path) 40 { 41 //Try里面抓取错误 42 try 43 { 44 if (_tempAssetBundles.ContainsKey(path))//存在则直接读取 45 { 46 return _tempAssetBundles[path]; 47 } 48 49 AssetBundle ab= AssetBundle.LoadFromFile(_assetBundleRootPath+path);//从文件加载AB包 50 PackageForAssetBundle pfa = new PackageForAssetBundle(ab,path);//创建准备返回的值 51 _tempAssetBundles.Add(path, pfa);//加入字典 52 return pfa; //返回 53 } 54 catch(System.Exception error) 55 { 56 Debug.LogErrorFormat("读取AB包错误!\n[错误信息]\n{0}",error.Message);//抓取错误信息 57 return null;//返回 58 } 59 60 } 61 /// <summary> 62 /// 删除AB包(别直接用) 63 /// </summary> 64 /// <param name="package"></param> 65 public static void DestroyAssetBundle(PackageForAssetBundle package,bool bol) 66 { 67 package.GetAssetBundle().Unload(bol);//卸载AB包 68 _tempAssetBundles.Remove(package.GetPath());//字典移除 69 } 70 } 71 72 /// <summary> 73 /// 用于返回的类 74 /// </summary> 75 public class PackageForAssetBundle 76 { 77 78 /// <summary> 79 /// AB包 80 /// </summary> 81 private AssetBundle _abPackage=null; 82 /// <summary> 83 /// 路径 84 /// </summary> 85 private readonly string _path = ""; 86 87 /// <summary> 88 /// 实例化时候需要输入的数据 89 /// </summary> 90 /// <param name="ab">AssetBundle包</param> 91 /// <param name="path">路径</param> 92 public PackageForAssetBundle(AssetBundle ab, string path) 93 { 94 _abPackage = ab;//设置这个类里面的变量 95 _path = path;//设置这个类的路径 96 } 97 98 /// <summary> 99 /// 获取路径 100 /// </summary> 101 /// <returns>路径</returns> 102 public string GetPath() 103 { 104 return _path;//给你路径~ 105 } 106 /// <summary> 107 /// 获取AB包 108 /// </summary> 109 /// <returns>AB包</returns> 110 public AssetBundle GetAssetBundle() 111 { 112 return _abPackage; 113 } 114 /// <summary> 115 /// 卸载AB包 116 /// </summary> 117 /// <param name="bol">这个设置false会造成残留,切换场景将会把残留全部清除</param> 118 public void UnLoadAssetBundle(bool bol) 119 { 120 121 AssetBundleManager.DestroyAssetBundle(this,bol);//删除 122 } 123 /// <summary> 124 /// 读取资源...(类型需要转换) 125 /// </summary> 126 /// <param name="_name">资源名字</param> 127 /// <returns>返回资源,null为读取失败</returns> 128 public Object GetAsset(string _name) 129 { 130 //抓捕错误 131 try 132 { 133 Object obj =_abPackage.LoadAsset(_name);//读取资源 134 135 return obj;//返回 136 } 137 catch (System.Exception error) 138 { 139 Debug.LogErrorFormat("读取资源失败!\n[错误信息]\n{0}", error.Message);//抓取错误信息 140 return null;//返回 141 } 142 } 143 } 144 }
2.打包AssetBundle:
首先我们得创建一个名为Editor的文件夹(该文件夹的文件不会被打包,是编辑器扩展文件的存放文件夹,详情请百度),并在此文件夹创建子文件夹,名为Scripts(存放代码的emmm,所有的文件/文件夹名字一定要英文名字,中文等英文除外的名字不知道会发生什么鬼错误)。
文件夹创建完毕后,再在Scripts文件夹下面创建一个名为AssetBundlesTools的C#脚本,用于打包AssetBundle的。以下是代码(详细注释啦~):
1 /* 2 * 编辑者:Miku酱 3 * 版本:1 4 * 首次编写日期:2019/09/14 20:00 5 * 修改日期:2019/09/14 20:00 6 * 强行加一行~~~ 7 */ 8 9 using System.IO;//I/O文件读写,这里用于文件夹的存在检测以及创建 10 using UnityEditor;//引入Unity编辑器类 11 using UnityEngine; 12 using LuoHao.AssetBundleManager;//引入AssetBundleManager命名空间 13 14 public class AssetBundlesTools : MonoBehaviour 15 { 16 [MenuItem("AssetsBundle/Build AssetBundles(Android)")]//在工具栏创建按钮 17 static void BuildAllAssetBundles()//进行打包的方法 18 { 19 string dir = AssetBundleManager._assetBundleRootPath;//根据AssetBundleManager获取根路径 20 //判断该目录是否存在 21 if (Directory.Exists(dir) == false) 22 { 23 Directory.CreateDirectory(dir);//在工程下创建AssetBundles目录 24 } 25 //参数一为打包到哪个路径,参数二压缩选项(默认) 参数三 平台的目标(安卓) 26 BuildPipeline.BuildAssetBundles(dir, BuildAssetBundleOptions.None, BuildTarget.Android); 27 Debug.Log("打包Okay啦~~~"); 28 29 } 30 31 }
3.创建AssetBundle以及读取测试:
A.设置标签:
选择一个预制体(Perfab),在属性面板看到右下角的标签设置,点击右小角左边的那个按钮,新增并设置名字:
然后在点击右边的那个,新增并设置后缀(一般AssetBundle),如图:
最后变成这样~
B.打包AssetBundle:
上面第二步骤创建了一个打包的代码,并在工具栏新增了按钮,于是我们看到:
点击内个按钮,等待打包~~~
打包成功后我们可以看到控制台打出的信息,并且可以在StreamingAsset文件夹看到我们的文件,如果看不到请刷新编辑器(代码里面打包成功后也可以加一句),如图:
C.测试读取AssetBundle:
随意位置创建一个名为Test(随意名字)的Csharp(即C#):
代码如下~~~
1 /* 2 * 编辑者:Miku酱 3 * 版本:1 4 * 首次编写日期:2019/09/14 22:00 5 * 修改日期:2019/09/14 22:00 6 * 强行加一行~~~ 7 */ 8 using System.Collections; 9 using System.Collections.Generic; 10 using UnityEngine; 11 using LuoHao.AssetBundleManager;//引入命名空间 12 public class Test : MonoBehaviour 13 { 14 /// <summary> 15 /// 生成时候用到的父对象, 16 /// </summary> 17 public Transform _father; 18 void Start() 19 { 20 PackageForAssetBundle pack = AssetBundleManager.GetAssetBundle("1002_gongsunli_show_model.assetbundle"); 21 //读取AB包,sting字符串为刚刚设置的标签 格式 名字.后缀 就像我的1002_gongsunli_show_model.assetbundle 22 //上面的string字符串可以不用区分大小写 23 24 25 GameObject gm = pack.GetAsset("1992_Li_Show1_Pure") as GameObject; 26 //里面的string字符串为打包时候的被标签标记的文件的预制体名字(如果标记的是文件夹则) 27 //as GameObject是转化了下格式(Object->GameObject) 28 29 30 gm = Instantiate(gm, _father);//实例化物体(生成物体在场景中) 31 gm.transform.localPosition = Vector3.zero;//设置坐标 32 33 34 } 35 36 37 }
把代码挂到任意一个物体上,把父物体拖入到代码_father变量上:
然后我们就可以看到我们帅气的阿离出现在了场景中~~~
到这步就结束啦~如果有我文章有好的建议的不妨说一下哟~(花费了一晚上,头发又少了几根)
目录传送门:这是目录鸭~
转载于:https://www.cnblogs.com/Miku-CEB-Bug/p/11520547.html
[1]尝试用Unity3d制作一个王者荣耀(持续更新)-AssetBundle管理器相关推荐
- (目录)[0]尝试用Unity3d制作一个王者荣耀(持续更新)-游戏规划
太得闲了于是想写个农药,虽然可能会失败但是还是要试一试. 因为是自学的不是Unity专业的可能表达语言会有些不标准!望见谅! 结构: 以组件式(比如说摇杆控制和玩家部分的编写是分离的,可以自由拼装)作 ...
- 手把手教Java初学者制作一个王者荣耀游戏,1天就能学会。
刚入门的java初学者,在学会一定项目后,都想先做一款游戏来练练手,来看看自己的知识掌握的怎么样了,那有的初学者并不知道可以做哪些项目,和不知道自己能做什么项目,现在小编就带大家来一起看看Java开发 ...
- Unity3d制作一个简单粗暴的五子棋项目工程源码
Unity3d制作一个简单粗暴的五子棋 最终效果 项目源码 绘制棋盘 绘制构思 绘制代码 效果图 放置棋子 功能和效果 功能 效果 制作棋子 定义类和类型 棋子类型 棋盘格类 实现功能 初始棋盘格数据 ...
- 王者荣耀s14服务器维护时间,王者荣耀s14更新时间是什么时候 王者荣耀s14赛季时间...
王者荣耀s14更新时间是什么时候?s14赛季开始时间已经最终确定为1月17日,是不是比你预料的要早一些呢?下面是王者荣耀s14赛季时间,快一起来看看吧. 王者荣耀s14赛季时间 开启长安之门活动不仅可 ...
- 安卓手机更新过程手机乱码_王者荣耀安卓更新更新时出现乱码解决办法
王者荣耀1月14日进行版本大更新了,一般情况下大版本更新容易出问题的是苹果,但这次反过来是安卓,包括更新卡在45%.资源包升级失败.解析包出现问题等情况,这些都如何解决呢?小编马上就给大家分享一下解决 ...
- 王者荣耀s22服务器未响应是什么意思,王者荣耀s22更新后卡顿怎么办 王者荣耀破晓版本进不去解决方法...
王者荣耀 大小:1.66GB 手机网游 王者荣耀s22更新后卡顿怎么办?王者荣耀手游今日更新了[破晓]版本,部分玩家在下载新版本后出现了卡顿的情况,加载进度条在45%的时候就直接卡死了.下面就让我们一 ...
- 一个简单的PHP邮件列表管理器
1.需求分析 管理员应该能够建立和修改邮件内容. 管理员应该能够将文本或HTML格式的新闻信件发送给一个列表中的所有订阅者. 用户应该能够通过注册使用一个站点,并且可以进入并修改他们的个人资料. 用户 ...
- 制作《王者荣耀》需要学习哪些技术?
<王者荣耀>属于典型的Moba类游戏,和<英雄联盟>属于同一种游戏类型,那么<王者荣耀>这种游戏是如何制作的?又需要学习哪些技术点呢?今天我们一起来分析一下. 这里 ...
- 可能你需要一个王者荣耀刷金币神器(解除网瘾)
这个小东西大概是在我大二的时候接触JAVA第二周的时候写的 算是我戒除游戏的头号功臣!! 主要思路: 用一个鼠标连点器加上王者荣耀模拟器让它能够不间断地打冒险模式.. 效果: 每周的金币能够在两个半小 ...
最新文章
- hdu3829(最大独立集)
- 冒泡排序_python实现冒泡排序
- C++编译期多态与运行期多态
- Microsoft 的 OpenSource Licence
- 微软宣布推出Azure Blockchain Tokens加密代币平台
- 内存版u-boot制作
- Point和PointF
- ubuntu mysql5.7配置_ubuntu系统mysql5.7忘记/设置root的坑
- Python使用递归法对整数进行因数分解
- Android系统 miui主题6,miui主题工具-miui主题工具最新版v2.6.2 安卓版_永辉资源网
- C/C++编程笔记:浪漫流星雨装b表白程序
- scau 18967 六一儿童节
- 【FineBI】权限控制之动态维度/动态列
- window.print() 实现A4纸张打印及去掉页眉页脚及打印链接
- [设备驱动] 最简单的内核设备驱动--字符驱动
- 数字电路技术可能出现的简答题_学堂云卡通说解数字电子技术(自主模式)答案第一小节课后作业答案...
- 高三班主任写给学生的一封信(在读大学的要看完)
- 【Keil编译警告】warning C316:unterminated conditionals
- Android的IPC
- php显示照片墙,照片墙(css动态效果)
热门文章
- 南北棋牌游戏大不同,我就爱玩南方棋牌
- 报错 :DeprecationWarning: Mongoose: `findOneAndUpdate()` and `findOneAndDelete()` without the `useFind
- Power bi 4.13 雷达图
- 离散数学复习要点(屈婉玲版教材)
- 在职研究生计算机远程教学,在职研究生远程课程
- Johnson Counter/约翰逊计数器
- 【蓝桥杯单片机(17)】第六届蓝省赛-温度记录器
- Qt温度湿度传感器采样上位机源代码C++数据记录功能Windows上位机
- 关闭远程,模拟鼠标键盘失效!
- 【Chapter2】微信获取用户信息(昵称、头像、openid)