/*
* <资源打包介绍>
* 首先会根据已经建好的文件进行遍历,找到所有预制物并设置AssetBundleName,因为是遍历Resources下面的文件夹,
* 所以可以将每个文件夹里的所有预制物打成一个包,然后打包到StreamingAssets 下面,并会生成一个配置文件,这个
* 配置文件是以Resources下的文件夹命名的,一个文件夹一个配置文件,方便后面的更新资源,这个配置文件是根据打包
* 好的包文件生成的,每行都记录了单个包的路径+;+.manifest文件里的crc码,当每次打包预制物有改变时,crc码会重新
* 生成,更新资源时会通过配置文件里每个包路径后面的crc码来判断这个包是否需要更新。
*
*
* 所有需要打包的预制物需要放入文件夹 AssetBundleResources/Resources 下进行打包.
* 打包出来的文件会在 Assets/StreamingAssets(没有该文件夹会自动创建) 文件夹下生成.
*
* 路径供阅读下面代码参考
* 完整的需要打包路径:Assets\AssetBundleResources\Resources\Prefad\UI\XXX.prefab
* 完整的打包好的路径(安卓):Assets\StreamingAssets\Android\resources\prefad\ui\XXX.unity3d
* 完整的配置文件路径:Assets\StreamingAssets\Android\configuration\prefad\ui.txt
*
*
* 因为unity5.X不需要我们来管理引用, 所以下面的代码大部分都是对路径和文件夹的处理,打包的代码也就两行
* 1:设置AssetBundleName
*:2:根据平台设置进行打包
*
* 该段代码打包流程
* 清除已设置的AssetBundleName -→ 找到要打包的资源并设置 AssetBundleName -→ 进行打包 -→ 创建文本并写入配置信息
*
* 调用该函数,unity会自动根据资源的标签进行打包,而且是增量打包,
* a.对于资源没有变更的bundle包,不会触发重新打包;
* b.资源没变,即使生成目录下的bundle包被删除了,unity也不会重新打包;
* c.生成目录下的bundle包对应的manifase被删了,会重新打包;
* d.可以使用BuildAssetBundleOptions.ForceRebuildAssetBundle参数触发强制重新打包。
*
*
*/
public
class
Builder :
Editor
{
[
MenuItem(
"打包/热更新打包")]
public
static
void
BuildAssetBundleAll()
{
#if UNITY_ANDROID &&
UNITY_EDITOR
BuildResource(
BuildTarget.
Android);
#endif
#if UNITY_IOS &&
UNITY_EDITOR
BuildResource(
BuildTarget.
iOS);
#endif
}
///
<
summary
>
/// 资源打包
///
</
summary
>
///
<
param
name
=
"target"
>
打包平台
</
param
>
static
void
BuildResource(
BuildTarget target)
{
//清除所有之前设置过的AssetBundleName
ClearAssetBundlesName();
//代码中给资源设置AssetBundleName
SetAssetBundelsName(
AssetPath.
OriginalPath);
//因为要根据平台打包,为了方便分类,所以在Assets\StreamingAssets目录下创建一个
//以平台名字命名的文件夹来放置各平台打出来的包和其他相关的文件,以方便管理
//例如安卓平台: 处理路径为Assets\StreamingAssets\Android