( 本案例使用Unity2021.3.26f1c1 )
一、安装Hybrid
参考 Hybrid快速上手
也可以直接clone 示例项目 https://github.com/focus-creative-games/hybridclr_trial.git
推荐使用第二种,有AOT补充元数据的dll,否则在下面的代码里剔除元数据相关的代码拷贝和热更操作
需要注意设置
这个链接是我自己改过的,https://gitee.com/pangchenglong/hybridclr.git
(测试时只需要先Hybrid->Generate->All,再AddressableGroups->Build->NewBuild,然后运行)
二、安装Addressable
在PackageManager中安装就行
1、Window->Asset Management->Addressables分别设置Settings、Hosting、Profiles、Groups
Settings:
创建Cache Initialization Settings,Directory设置 {UnityEngine.Application.persistentDataPath},并在Initialization Objects中添加
Hosting:
Profiles:
Groups:
三、创建Hybrid打包工具
创建Editor文件夹,创建脚本
public class BuildDllCommand:Editor
{
[MenuItem("HybridCLR/仅拷贝dll到项目里")]
public static void CopyDll()
{
BuildTarget target = EditorUserBuildSettings.activeBuildTarget;
CopyABAOTHotUpdateDlls(target);
AssetDatabase.Refresh();
}
[MenuItem("HybridCLR/打包并拷贝dll到项目里")]
public static void BuildAndCopyDll()
{
BuildTarget target = EditorUserBuildSettings.activeBuildTarget;
CompileDllCommand.CompileDll(target);
CopyABAOTHotUpdateDlls(target);
AssetDatabase.Refresh();
}
public static void CopyABAOTHotUpdateDlls(BuildTarget target)
{
CopyAOTAssembliesToAssets();
CopyHotUpdateAssembliesToAssets();
}
private static string AssembliesDstDir {
get => Application.dataPath + "/HotFix"; }
public static void CopyAOTAssembliesToAssets()
{
var target = EditorUserBuildSettings.activeBuildTarget;
string aotAssembliesSrcDir = SettingsUtil.GetAssembliesPostIl2CppStripDir(target);
string aotAssembliesDstDir = AssembliesDstDir;
foreach (var dll in SettingsUtil.AOTAssemblyNames)
{
string srcDllPath = $"{aotAssembliesSrcDir}/{dll}.dll";
if (!File.Exists(srcDllPath))
{
Debug.LogError($"ab中添加AOT补充元数据dll:{srcDllPath} 时发生错误,文件不存在。裁剪后的AOT dll在BuildPlayer时才能生成,因此需要你先构建一次游戏App后再打包。");
continue;
}
string dllBytesPath = $"{aotAssembliesDstDir}/{dll}.dll.bytes";
File.Copy(srcDllPath, dllBytesPath, true);
Debug.Log($"[CopyAOTAssembliesToAssets] copy AOT dll {srcDllPath} -> {dllBytesPath}");
}
}
public static void CopyHotUpdateAssembliesToAssets()
{
var target = EditorUserBuildSettings.activeBuildTarget;
string hotfixDllSrcDir = SettingsUtil.GetHotUpdateDllsOutputDirByTarget(target);
string hotfixAssembliesDstDir