[1]尝试用Unity3d制作一个王者荣耀(持续更新)->AssetBundle管理器
如果已经看过本章节:目录传送门:这是目录鸭~
1.AssetBundleManager:
首先我们创建一个文件夹,叫AssetBundleManager,再创建Csharp(即C#)脚本,名为AssetBundleManager(这个代码是作为我们管理AB包的基类)。以下是代码(详细注释啦~,这个代码后面可能会经常改动):
/*
* 编辑者:Miku酱
* 版本:1
* 首次编写日期:2019/09/14 21:00
* 修改日期:2019/09/14 21:00
* 强行加一行~~~
*/ using System.Collections;
using System.Collections.Generic;
using UnityEngine; namespace LuoHao.AssetBundleManager//命名空间,可以自己定义,我的格式是 名字拼音.功能名字;
{
/// <summary>
/// AB包管理基类
/// </summary>
public class AssetBundleManager : MonoBehaviour
{
#region 公共变量 /// <summary>
/// AB包根路径(尾部已带斜杠)
/// </summary>
public static string _assetBundleRootPath = Application.streamingAssetsPath+"/AssetBundles/"; #endregion
#region 私有变量
/// <summary>
/// 临时存放AB包类的字典
/// </summary>
private static Dictionary<string,PackageForAssetBundle> _tempAssetBundles = new Dictionary<string, PackageForAssetBundle>();
#endregion
/// <summary>
/// 根据路径取得AB包
/// </summary>
/// <param name="path">路径</param>
/// <returns>返回类(失败返回null)</returns>
public static PackageForAssetBundle GetAssetBundle(string path)
{
//Try里面抓取错误
try
{
if (_tempAssetBundles.ContainsKey(path))//存在则直接读取
{
return _tempAssetBundles[path];
} AssetBundle ab= AssetBundle.LoadFromFile(_assetBundleRootPath+path);//从文件加载AB包
PackageForAssetBundle pfa = new PackageForAssetBundle(ab,path);//创建准备返回的值
_tempAssetBundles.Add(path, pfa);//加入字典
return pfa; //返回
}
catch(System.Exception error)
{
Debug.LogErrorFormat("读取AB包错误!\n[错误信息]\n{0}",error.Message);//抓取错误信息
return null;//返回
} }
/// <summary>
/// 删除AB包(别直接用)
/// </summary>
/// <param name="package"></param>
public static void DestroyAssetBundle(PackageForAssetBundle package,bool bol)
{
package.GetAssetBundle().Unload(bol);//卸载AB包
_tempAssetBundles.Remove(package.GetPath());//字典移除
}
} /// <summary>
/// 用于返回的类
/// </summary>
public class PackageForAssetBundle
{ /// <summary>
/// AB包
/// </summary>
private AssetBundle _abPackage=null;
/// <summary>
/// 路径
/// </summary>
private readonly string _path = ""; /// <summary>
/// 实例化时候需要输入的数据
/// </summary>
/// <param name="ab">AssetBundle包</param>
/// <param name="path">路径</param>
public PackageForAssetBundle(AssetBundle ab, string path)
{
_abPackage = ab;//设置这个类里面的变量
_path = path;//设置这个类的路径
} /// <summary>
/// 获取路径
/// </summary>
/// <returns>路径</returns>
public string GetPath()
{
return _path;//给你路径~
}
/// <summary>
/// 获取AB包
/// </summary>
/// <returns>AB包</returns>
public AssetBundle GetAssetBundle()
{
return _abPackage;
}
/// <summary>
/// 卸载AB包
/// </summary>
/// <param name="bol">这个设置false会造成残留,切换场景将会把残留全部清除</param>
public void UnLoadAssetBundle(bool bol)
{ AssetBundleManager.DestroyAssetBundle(this,bol);//删除
}
/// <summary>
/// 读取资源...(类型需要转换)
/// </summary>
/// <param name="_name">资源名字</param>
/// <returns>返回资源,null为读取失败</returns>
public Object GetAsset(string _name)
{
//抓捕错误
try
{
Object obj =_abPackage.LoadAsset(_name);//读取资源 return obj;//返回
}
catch (System.Exception error)
{
Debug.LogErrorFormat("读取资源失败!\n[错误信息]\n{0}", error.Message);//抓取错误信息
return null;//返回
}
}
}
}
2.打包AssetBundle:
首先我们得创建一个名为Editor的文件夹(该文件夹的文件不会被打包,是编辑器扩展文件的存放文件夹,详情请百度),并在此文件夹创建子文件夹,名为Scripts(存放代码的emmm,所有的文件/文件夹名字一定要英文名字,中文等英文除外的名字不知道会发生什么鬼错误)。
文件夹创建完毕后,再在Scripts文件夹下面创建一个名为AssetBundlesTools的C#脚本,用于打包AssetBundle的。以下是代码(详细注释啦~):
/*
* 编辑者:Miku酱
* 版本:1
* 首次编写日期:2019/09/14 20:00
* 修改日期:2019/09/14 20:00
* 强行加一行~~~
*/ using System.IO;//I/O文件读写,这里用于文件夹的存在检测以及创建
using UnityEditor;//引入Unity编辑器类
using UnityEngine;
using LuoHao.AssetBundleManager;//引入AssetBundleManager命名空间 public class AssetBundlesTools : MonoBehaviour
{
[MenuItem("AssetsBundle/Build AssetBundles(Android)")]//在工具栏创建按钮
static void BuildAllAssetBundles()//进行打包的方法
{
string dir = AssetBundleManager._assetBundleRootPath;//根据AssetBundleManager获取根路径
//判断该目录是否存在
if (Directory.Exists(dir) == false)
{
Directory.CreateDirectory(dir);//在工程下创建AssetBundles目录
}
//参数一为打包到哪个路径,参数二压缩选项(默认) 参数三 平台的目标(安卓)
BuildPipeline.BuildAssetBundles(dir, BuildAssetBundleOptions.None, BuildTarget.Android);
Debug.Log("打包Okay啦~~~"); } }
3.创建AssetBundle以及读取测试:
A.设置标签:
选择一个预制体(Perfab),在属性面板看到右下角的标签设置,点击右小角左边的那个按钮,新增并设置名字:

然后在点击右边的那个,新增并设置后缀(一般AssetBundle),如图:

最后变成这样~

B.打包AssetBundle:
上面第二步骤创建了一个打包的代码,并在工具栏新增了按钮,于是我们看到:

点击内个按钮,等待打包~~~

打包成功后我们可以看到控制台打出的信息,并且可以在StreamingAsset文件夹看到我们的文件,如果看不到请刷新编辑器(代码里面打包成功后也可以加一句),如图:

C.测试读取AssetBundle:
随意位置创建一个名为Test(随意名字)的Csharp(即C#):
代码如下~~~
/*
* 编辑者:Miku酱
* 版本:1
* 首次编写日期:2019/09/14 22:00
* 修改日期:2019/09/14 22:00
* 强行加一行~~~
*/
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using LuoHao.AssetBundleManager;//引入命名空间
public class Test : MonoBehaviour
{
/// <summary>
/// 生成时候用到的父对象,
/// </summary>
public Transform _father;
void Start()
{
PackageForAssetBundle pack = AssetBundleManager.GetAssetBundle("1002_gongsunli_show_model.assetbundle");
//读取AB包,sting字符串为刚刚设置的标签 格式 名字.后缀 就像我的1002_gongsunli_show_model.assetbundle
//上面的string字符串可以不用区分大小写 GameObject gm = pack.GetAsset("1992_Li_Show1_Pure") as GameObject;
//里面的string字符串为打包时候的被标签标记的文件的预制体名字(如果标记的是文件夹则)
//as GameObject是转化了下格式(Object->GameObject) gm = Instantiate(gm, _father);//实例化物体(生成物体在场景中)
gm.transform.localPosition = Vector3.zero;//设置坐标 } }
把代码挂到任意一个物体上,把父物体拖入到代码_father变量上:

然后我们就可以看到我们帅气的阿离出现在了场景中~~~

到这步就结束啦~如果有我文章有好的建议的不妨说一下哟~(花费了一晚上,头发又少了几根)
目录传送门:这是目录鸭~
[1]尝试用Unity3d制作一个王者荣耀(持续更新)->AssetBundle管理器的更多相关文章
- [0]尝试用Unity3d制作一个王者荣耀(持续更新)->游戏规划
太得闲了于是想写个农药,虽然可能会失败但是还是要试一试. 因为是自学的不是Unity专业的可能表达语言会有些不标准!望见谅! 结构: 以组件式(比如说摇杆控制和玩家部分的编写是分离的,可以自由拼装)作 ...
- [3]尝试用Unity3d制作一个王者荣耀(持续更新)->选择英雄-(中)
如果已经看过本章节:目录传送门:这是目录鸭~ 上节内容写了Actor管理器,那么这一节让我们先创建一个角色.(此章节开始加速...) 1.制作角色展示AssetBundle: 提取农药某个展示模型(S ...
- [1]尝试用Unity3d制作一个王者荣耀(持续更新)->选择英雄-(上)
如果已经看过本章节:目录传送门:这是目录鸭~ 1.场景搭建: 首先我们去AssetStore逛淘宝~~~ 我淘到的是这个资源,其他好看的场景(消耗不高的都行). 然后我们导入了这个资源后,把资源根文件 ...
- 尝试用kotlin做一个app(二)
导航条 我想实现的效果是这样的 类似于ViewPager的效果,子类导航页面可以滑动,当滑动某个子类导航页面,导航线会平滑地向父类导航移动 ·添加布局 <!--导航分类:编程语言/技术文档/源码 ...
- 尝试用kotlin做一个app(五)
JSP后台管理系统 开发工具是IntelliJ IDEA+tomcat+mysql5.6.19+mysql-connector-java-5.1.48.jar+easyui+kindeditor 之前 ...
- 尝试用kotlin做一个app(四)
本来是应该为主页加载数据库数据了,但是想着做后台,之前写jsp后台写吐了,所以先拖几天.把之前的代码完善一下,或者添加些新内容. ...... 多个fragment切换卡顿 首先修正一个bug.从主页 ...
- 尝试用kotlin做一个app(三)
新闻列表 添加新闻列表可以使用RecyclerView.但是有个问题,RecyclerView只会在内部滚动,不会带动整个屏幕滚动.所以在原根布局外层添加androidx.core.widget.Ne ...
- 尝试用kotlin做一个app(一)
1.先添加一下anko库 依赖:implementation "org.jetbrains.anko:anko:$anko_version" 版本:ext.anko_version ...
- 尝试用kotlin做一个app(写在前面)
学kotlin的目的好像就是做一个app,不一定有什么想做的项目,只是单纯想掌握这一门技术,确切地说只是单纯想学会做app.对于概念的东西,我也没兴趣深究,用得到的学一下,用不到的,就算了.我也不知道 ...
随机推荐
- Spring入门(八):自动装配的歧义性
1. 什么是自动装配的歧义性? 在Spring中,装配bean有以下3种方式: 自动装配 Java配置 xml配置 在这3种方式中,自动装配为我们带来了很大的便利,大大的降低了我们需要手动装配bean ...
- Spring boot实战项目整合阿里云RocketMQ (非开源版)消息队列实现发送普通消息,延时消息 --附代码
一.为什么选择RocketMQ消息队列? 首先RocketMQ是阿里巴巴自研出来的,也已开源.其性能和稳定性从双11就能看出来,借用阿里的一句官方介绍:历年双 11 购物狂欢节零点千万级 TPS.万亿 ...
- Android 框架揭秘 --读书笔记
Android 框架揭秘 Insied the Android Framework
- 【Node/JavaScript】论一个低配版Web实时通信库是如何实现的( WebSocket篇)
引论 simple-socket是我写的一个"低配版"的Web实时通信工具(相对于Socket.io),在参考了相关源码和资料的基础上,实现了前后端实时互通的基本功能 选用了Web ...
- Go---go-cache包学习
github.com/patrickmn/go-cachego-cache是一款类似于memached 的key/value 缓存软件.它比较适用于单机执行的应用程序.go-cache实质上就是拥有过 ...
- Flutter学习笔记(21)--TextField文本框组件和Card卡片组件
如需转载,请注明出处:Flutter学习笔记(21)--TextField文本框组件和Card卡片组件 今天来学习下TextField文本框组件和Card卡片组件. 只要是应用程序就少不了交互,基本上 ...
- 台式机主机u盘安装centos7报错及注意事项
利用UltraISO制作U盘启动安装台式机CentOS7系统:流程及报错解决 一.制作U盘 1.首先打开UltraISO软件,尽量下载最新版的 2.点击工具栏中的第二个打开镜像文件工具,如图红色方框标 ...
- Linux x86和x64的区别
0x01:寄存器分配的不同 (1)64位有16个寄存器,32位只有8个.但是32位前8个都有不同的命名,分别是e _ ,而64位前8个使用了r代替e,也就是r _.e开头的寄存器命名依然可以直接运用于 ...
- 入门MySQL——用户与权限
前言: 前面几篇文章为大家介绍了各种SQL语法的使用,本篇文章将主要介绍MySQL用户及权限相关知识,如果你不是DBA的话可能平时用的不多,但是了解下也是好处多多. 1.创建用户 官方推荐创建语法为 ...
- [Python] 通过采集23万条数据,对《哪吒》影评分析
一.说明 数据来源:猫眼: 运行环境:Win10/Python3.7 和 Win7/Python3.5: 分析工具:jieba.WorldCloud.pyecharts和matplotlib: 程序基 ...