AssetBundle打包&HybridCLR热更新

Unity AssetBundle以及HybridCLR热更新框架试用

一、AssetBundle

  1. 简介

每个资源的Inspector视窗底部都有AssetBundle选项,前一部分是AB名称,后一部分是AB后缀名称

在打包过程中Unity会将相同AB标签的资源打包到一起

  1. 特点
  • 平台差异:特定于平台的资产压缩包,所以打包是需要选择对应的平台
  • 相互依赖:AB之间可以互相依赖引用
  • 热更友好:一般将一些资源放在服务器,一来方便热更,二来应用安装包不会太大
  1. 打包

没有什么特殊需求直接用Unity官方提供的打包工具就好,通过URL添加Package

1
https://github.com/Unity-Technologies/AssetBundles-Browser.git

安装好后在菜单栏 Window -> AssetBundle Browser 打开面板

可以查看当前创建的标签下的资源,选择打包目标平台,输出路径,然后打包即可

二、HybridCLR

我们以官方提供的体验项目为基础搭建工程 点我前往Github下载

  1. 配置

打开项目后菜单栏选择 HybridCLR -> Install.. 安装代码到本地目录

PlayerSetting中选择 IL2CPP 和 .NET Framework

  1. LoadDll.cs

主场景找到该脚本,做一些修改

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
public class LoadDll : MonoBehaviour
{
void Start()
{
BetterStreamingAssets.Initialize();
StartCoroutine(StartGame());
}

IEnumerator StartGame()
{
LoadMetadataForAOTAssemblies();

#if !UNITY_EDITOR
System.Reflection.Assembly.Load(BetterStreamingAssets.ReadAllBytes("Assembly-CSharp.dll.bytes"));
#endif
//var uwr = UnityWebRequest.Get("https://xxxxxx.com/unity");
//var uwr = UnityWebRequest.Get(Application.dataPath + "/ABs/prefabs");
yield return uwr.SendWebRequest();
AssetBundle prefabAb = AssetBundle.LoadFromMemory(uwr.downloadHandler.data);
GameObject testPrefab = Instantiate(prefabAb.LoadAsset<GameObject>("Cube.prefab"));
GameObject cube = Instantiate(prefabAb.LoadAsset<GameObject>("Capsule.prefab"));
}

private static void LoadMetadataForAOTAssemblies()
{
List<string> aotMetaAssemblyFiles = new List<string>()
{
"mscorlib.dll",
"System.dll",
"System.Core.dll",
};
HomologousImageMode mode = HomologousImageMode.SuperSet;
foreach (var aotDllName in aotMetaAssemblyFiles)
{
byte[] dllBytes = BetterStreamingAssets.ReadAllBytes(aotDllName + ".bytes");
LoadImageErrorCode err = RuntimeApi.LoadMetadataForAOTAssembly(dllBytes, mode);
Debug.Log($"LoadMetadataForAOTAssembly:{aotDllName}. mode:{mode} ret:{err}");
}
}
}

如果有服务器,可以把打好的AB包放在服务器,然后通过UnityWebRequest请求资源,当然本地资源也可以用这种方法加载,不过需要注意路径

不过一般都是检查版本后先将资源更新到本地,然后再进行加载


AssetBundle打包&HybridCLR热更新
https://baifabaiquan.cn/2023/03/14/HybridCLR体验/
作者
白发败犬
发布于
2023年3月14日
许可协议