Unity资源管理框架Addressables总结

1.Addressables简介

Addressables 包提供了用于组织和打包应用程序内容的工具和脚本,以及用于在运行时加载和释放资产的 API。Addressables 系统构建于 Unity 的Asset Bundle,如果想在项目中使用AssetBundles而不需要编写自己的详细管理代码,应该使用Addressables。最佳实践是立即在新项目中开始使用 Addressables,以避免在开发后期进行不必要的代码重构和内容规划更改。

2.安装

使用包管理器安装 Addressables 包,:

  1. 打开包管理器(菜单:窗口 > 包管理器)。
  2. 设置包列表以显示Unity 注册表中的包。
  3. 在列表中选择Addressables 包。
  4. 单击**"安装"**(位于"包管理器"窗口的右侧底部)。

3.配置

Addressables 系统会创建一个名为 的文件夹AddressableAssetsData

4.将资源标记为可寻址资源

为了将资源使用Addr的API进行加载 以及 放入AB包,需要将资源标记为Addressable,标记后的资源会被添加到默认组中。可通过以下方式标记:

Inspector视图中 启用Addressable

将资产拖到Inspector中的 AssetReference 字段

将资源拖到Addressables Groups(Window->AssetManagement->Addressables->Groups)的组中:

若将Resources目录下的资源设为Addressable,需将资源移出资源文件夹

5.预制体实例化

实例化:

cs 复制代码
	using UnityEngine.AddressableAssets;

    public AssetReference baseCube;
	void Start () {
		baseCube.InstantiateAsync();
	}

销毁

cs 复制代码
    using UnityEngine.AddressableAssets;

    Addressables.ReleaseInstance(gameObject);

    
    private void OnDestroy()
    {
        if (reference != null && reference.IsValid())
            reference.ReleaseAsset();
    }

6.异步资源加载

Addressables 对需要加载的任务使用异步操作,这可以防止这些耗时操作使游戏卡顿。当调用如 LoadAssetAsync 方法时,它返回一个AsyncOperationHandle对象,称为异步操作句柄,可将其理解为【异步操作的遥控器/控制对象】

您可以使用以下技术来等待异步操作的结果,同时允许其他脚本继续处理:

6.1 等待带有事件的异步加载

10.Addr源码阅读与修改

项目文件夹/Library/PackageCache/com.unity.addressables@版本号/

可以浏览和阅读所有运行时(Runtime)和编辑器(Editor)的源代码

可通过以下步骤修改源码

  1. 复制源码 :将Library/PackageCache 下的 Addressables 包文件夹完整地复制出来。

  2. 粘贴到特定目录 :将复制好的文件夹粘贴到你项目的 Packages 根目录下。

  3. 移除原有包 :在 Package Manager 中卸载通过官方源安装的 Addressables 包。这一步很重要,可以避免未来与你在 Packages 目录下的修改版发生冲突-1

  4. 导入本地包 :在 Package Manager 中,选择"从本地磁盘安装"(Install package from disk...),然后找到并选中你刚刚粘贴到 Packages 目录下的包的 package.json 文件。

完成以上步骤后,就会以本地的副本为准,对 Packages/com.unity.addressables/ 下的任何代码修改都会生效。

修改后,未来升级 Addressables 版本时需要手动合并代码,维护成本会增加。

11 参考:

Addressables

Addressables-Sample

相关推荐
mxwin20 小时前
Unity URP 下 MatCap 技术详解 无视光照环境的卡通与质感渲染方案
unity·游戏引擎
weixin_4093831221 小时前
godot 获取敌人位置自动发射子弹 旋转枪口
游戏引擎·godot
CDN3601 天前
游戏盾日志看不到攻击?日志开启与上报问题排查
游戏·网络安全·游戏引擎
山檐雾2 天前
OctreeNode
unity·c#·八叉树
WarPigs2 天前
Unity协程返回值的解决方案
unity·游戏引擎
WarPigs2 天前
Unity单例笔记
unity·游戏引擎
风酥糖3 天前
Godot游戏练习01-第24节-多人游戏暂停菜单,游戏优化
游戏·游戏引擎·godot
Allen74743 天前
ComfyUI 自动化生产 3D资产 工作流笔记
图像处理·opencv·unity·自然语言处理·3d模型生成·confyui
nnsix3 天前
Unity Windows11 打字中文显示不出来输入法的候选框
unity
SCLchuck3 天前
Godot 4 2D 物理引擎位置初始化踩坑:add_child() 和 position 到底谁先? (错误位置触发物理事件)
游戏引擎·godot·游戏开发·物理引擎