项目打包策略
项目打包策略
打包策略:
A:把整个目录打进一个ab
B:把目录下的子目录中的资源打进子目录的ab中
C:把整个目录拷贝到ab目录不打ab
D:目录下的每一个资源打一个ab,不管是否重复
E:目录下的每一个资源打一个ab,每个依赖也打成一个ab,去除重复
F:图集的图片根据tag打ab,每个tag打一个ab
G:lua打包,一个目录打成一个ab,可以选择是否编码,编码为.bytes文件,通过根据不同平台选择LuaEncoder目录下的对应编码器进去编码(利用py脚本语言执行脚本运行luajit-2.1编码器)。编码器在各种运行平台和目标平台的使用情况如下。
H:lua打包,多个目录打成一个ab,会编码
各种策略应用的项目目录情况:
策略 | 目录 | 筛选模式 | 特点 | ||
---|---|---|---|---|---|
D | Assets/GameAssets/ui | (.asset)$ | 这类资源的特点是各个模块都有分布,数量多,1比1打ab策略有利于控制ab大小粒度,属于按类型和功能模块分组策略 | ||
Assets/GameAssets/ui | (.prefab)$ | ||||
Assets/GameAssets/ui/animations | (.controller)$ | ||||
Assets/GameAssets/ui/materials | (.mat)$ | ||||
Assets/GameAssets/audio | (.ogg | .mp3 | .wav)$ | ||
Assets/GameAssets/audio/audiomixer | (.prefab)$ | ||||
Assets/GameAssets/live2dcharacter | (.prefab)$ | ||||
Assets/GameAssets/live2dcharacter | (^(?!.*?(model))).+(.json | .bytes)$ | |||
Assets/GameAssets/bigbg | (.jpg | .png)$ | |||
Assets/GameAssets/font | (.ttf | .fontsettings)$ | |||
C | Assets/GameAssets/movie | (.mp4)$ | 这类资源一般是配置文件,或者像是mp4这种游戏中用得比较少的资源文件 | ||
Assets/GameAssets/config | (.txt | .png | .jpg)$ | ||
A | Assets/GameAssets/shaders | 全局常驻的文件 | |||
E | Assets/GameAssets/scene/pj-g_scene_assets | .*materials_dynload.+(.mat)$ | 这类资源的引用比较复杂,材质贴图引用得多,有些资源需要动态加载,需要对依赖资源做去重处理。 场景、spine人物动画、特效属于这类。 | ||
Assets/GameAssets/character | (.prefab)$ | ||||
Assets/GameAssets/language/[lang]/character | (.prefab)$ | ||||
Assets/GameAssets/effect | (.prefab)$ | ||||
Assets/GameAssets/language/[lang]/effect | (.prefab)$ | ||||
Assets/GameAssets/scene/pj-g_scene_prefab | (._p[\d]{0,}.prefab | ._stage.prefab)$ | |||
Assets/GameAssets/language/[lang]/scene/pj-g_scene_prefab | (._p[\d]{0,}.prefab | ._stage.prefab)$ | |||
F | Assets/AtlasSource | UI用的精灵图,需要根据自定义tag打图集,其实就是按功能模块分组策略 | |||
G | Assets/aounity-framework/ToLua/Lua | lua文件根据模块打ab,属于按逻辑实体分组策略,类似于粒度比较大的模块,但代码文件也属于系统常驻类型,不宜分得太小粒度 | |||
Assets/aounity-framework/Scripts/Lua/framework | |||||
Assets/aounity-framework/Scripts/Lua/frameworkext | |||||
Assets/Scripts/Lua/logic | |||||
H | Assets/aounity-framework/Scripts/Lua/bootstrap Assets/Scripts/Lua/bootstrap |
lua文件根据模块打ab,同一个模块多个目录打在一起 |
没有写明打包策略的多语言下的目录,说明跟对应其的公用目录的打包策略一致。
Lua编译
using luajit2.1.0-beta3.
编码器在各种运行平台和目标平台的使用:
不同平台使用的编码器不同
1.pc使用
luajit64: win, ios 64bit
luajit32: android 32bit
2. mac使用
编译命令
luajit\_mac32 make CC="gcc -m32"
luajit\_mac64 make XCFLAGS=-DLUAJIT\_ENABLE\_GC64
luavm: macos using luac(for u5.x).
luajit\_mac64: win, ios 64bit
luajit\_mac32: android 32bit
以下文件mac需要执行权限
luavm/luac
luajit\_mac32/luajit
luajit\_mac64/luajit
注意:没有权限mac无法编译,导致打不出lua文件的ab,也没有报错提示
其实研究ab分组策略就是研究资源依赖树实现资源加载最优的问题。
ab分组策略原则参考:https://zhuanlan.zhihu.com/p/91926428
build package
项目构建包逻辑原理很简单,前面处理和准备好参数和数据,传递给BuildPipeline.BuildAssetBundles方法构建ab。
工具面板上的参数解析:
isEncodeLua:是否时候luajit-2.1编码lua文件成字节码。
isForceRebuild:BuildAssetBundleOptions.ForceRebuildAssetBundle参数,强制重打ab,即使Asset没有更改。
isOnlyBuildLua:是否只打lua ab。√了就不会打其他资源ab,在调试真机时候更改lua代码进行调试会很方便。