2. Bundle构建工具
框架开发流程,,,热更新最重要的是Bundle,所以Bundle处理放在最前面,,后面二三阶段是C#与Lua的交互
- 第一阶段:Bundle处理
- 构建
- 加载
- 更新
- 第二阶段:C#调用Lua
- Lua脚本的加载与内存的管理
- Lua脚本的逻辑绑定与执行(Lua是独立的脚本,需要绑定到实体对象上,每一个功能单独写一个Lua脚本,例如一个UI,有对应UI的操作,UI的逻辑就全部写到Lua脚本里,把Lua脚本绑定到UI上)
- 第三阶段:向Lua提供接口(逻辑在Lua开发,有的东西不适合在Lua写,写进框架,后期提供接口)
- 第四阶段:完善和优化
环境安装
开发工具:Unity、VS、Git、TortoiseGit
导入Xlua:官方下载地址:https://github.com/Tencent/xLua
XLua的目录就是Unity的目录,只需要把Assets下面的Plugins和Xlua文件夹复制进Unity项目中即可
构建Bundle需要做什么?
- 查找BuildResources下的资源文件(根据策略模式打成Bundle包)
- 使用Unity提供的BuildPipeline进行构建(直接使用这个就可以打Bundle包)
meta不需要打入bundle包
Bundle Build策略?
- 按文件夹打包
,按照文件夹细分功能,根据最后一层构建Bundle
- 优势:bundle数量少,小包模式(第一次安装包小,没有热更资源,CDN下载热更文件):首次下载快
- 劣势:后期更新时,更新补丁大(例如一个图片bundle 5M,实际里面就一个小图片修改了,导致整个热更补丁大)
- 按文件打包
,例如把Image变成预设文件,每一个文件都要构建Bundle
- 优势:更新补丁很小,每一个文件都是一个Bundle包
- 劣势:小包模式:首次下载稍慢(也不会慢特别多,,两者区别不大,这个更简单)
打Bundle的工具是编辑器的代码,放到Scripts-Editor中,其他脚本放到Framework中
创建BuildTool脚本,BuildTool必须继承Editor,而非Mono,因为不用打进包里
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using System.IO;
/// <summary>
/// 构建工具类:
/// 创建了三种构建方法windows android ios。
/// Build方法:从所有路径查找文件,排除meta后,把每个文件名作为被打包资源名和bundle名(当然一个bundle可以打包多个文件),GetDependence获取所有文件的依赖文件,
/// 把这些信息写入到bundleInfos,BuildPipeline.BuildAssetBundles一下,就建好了ab包,然后把所有包的信息写入filelist中
/// </summary>
public class BuildTool : Editor
{
//如何使用Build呢,直接添加工具栏
[MenuItem("Tools/Build Windows Bundle")]
static void BundleWindowsBuild()
{
Build(BuildTarget.StandaloneWindows);
}
//如何使用Build呢,直接添加工具栏
[MenuItem("Tools/Build Android Bundle")]
static void BundleAndroidBuild()
{
Build(BuildTarget.Android);
}
//如何使用Build呢,直接添加工具栏
[MenuItem("Tools/Build IOS Bundle")]
static void BundleIOSBuild()