【Unity使用addressables制作资源热更+实时动态热更基本记录】

这篇具有很好参考价值的文章主要介绍了【Unity使用addressables制作资源热更+实时动态热更基本记录】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、Addressables基础操作教程
1、下载Addressables插件
点击菜单Window / Package Manager,打开插件包管理界面,搜索addressables
addressable 热更新,unity,游戏引擎
Addressables的打包方式其实也是AssetBundle格式,只是在此基础上做了一层封装,方便进行管理(比如打包、加载、依赖等)。而我们知道,没有加密的AssetBundle是可以使用AssetStudio等工具轻易进行资源逆向的。

安装成功后,可以看到多出了一个Window / Asset Management / Addressables菜单,
addressable 热更新,unity,游戏引擎
2、创建Addressables Settings
点击Groups菜单,点击Create Addressables Settings按钮

addressable 热更新,unity,游戏引擎
此时工程目录中会生成一个AddressableAssetsData文件夹,里面有很多设置文件
addressable 热更新,unity,游戏引擎
我们看回Addressables Groups窗口,可以看到它默认创建了一个组:Default Local Group (Default)
addressable 热更新,unity,游戏引擎
3、给Group添加资源
创建几个预设
addressable 热更新,unity,游戏引擎
文件名字可以任意起,注意不要跟Unity默认的文件系统文件夹名字相同,比如Resources、StreamingAssets等

选中资源文件,在Inspector窗口中勾选Addressable,它会自动添加到默认的Group中,也可以手动拖拽进去
addressable 热更新,unity,游戏引擎
4、创建新的Group
addressable 热更新,unity,游戏引擎图中1是默认的,一般用作添加打到本地自资源,2用来打远程加载资源

新建看下图
addressable 热更新,unity,游戏引擎
其实每个Group都是一个配置文件,可以在AddressableAssetsData / AssetGroups目录中找到对应的文件,如下
addressable 热更新,unity,游戏引擎
继续往下,我这里给Packed Assets添加了几个预设

addressable 热更新,unity,游戏引擎
怎么打包体内资源和包体外资源?又怎么加载?往下看。。

5、设置Build Path与Load Path
在Inspector窗口中,选中Packed Assets,将Build Path改为RemoteBuildPath,将Load Path改为RemoteLoadPath,如下
addressable 热更新,unity,游戏引擎
这样Packed Assets打出的资源就在包体外,它会被打到工程目录的ServerData目录中

而加载的时候,会去远程http://[PrivateIpAddress]:[HostingServicePort]这个地址加载(这里是localhost,我们可以改成别的IP或域名地址)

addressable 热更新,unity,游戏引擎
图1是打包的路径,图中2是加载的路径

在Inspector窗口中,选中Default Local Group,默认的Build Path为LocalBuildPath,Load Path为LocalLoadPath,如下
addressable 热更新,unity,游戏引擎
这里打出的包就在包体内,打出的包在Library\com.unity.addressables里面,在Bulid Settings出项目包时,会自动把这个资源包拷贝到StreamingAssets目录下。

6、修改RemoteBuildPath和RemoteLoadPath
如果你想修改RemoteBuildPath和RemoteLoadPath,可以在Addressables Groups窗口中点击Tools/Window/Profiles菜单
addressable 热更新,unity,游戏引擎
此时会打开Addressables Profiles窗口,我们可以修改修改RemoteBuildPath和RemoteLoadPath
addressable 热更新,unity,游戏引擎
这里RemoteLoadPath修改成远程服务器地址,我这里是用本地addressables自带的Hosting服务器,所以填写的是http://[PrivateIpAddress]:[HostingServicePort],怎么使用自带的服务器,往后看

7、打Addressable资源包
在Addressables Groups窗口中,点击Build / New Build / Default Build Script,就会开始打Addressable资源包了,等它打包完毕即可

addressable 热更新,unity,游戏引擎
上文中我们建了两个Group,其中Default Local Group作为包体内的资源包,Packed Assets作为包体外的资源包,我们分别看看他们都build到哪去了。

addressable 热更新,unity,游戏引擎
首先看下Default Local Group,上图就可以看到在工程目录Library下

接着我们看下Remote Group打出来的资源包,在工程目录的ServerData目录下,这是打包自动新建的,这里的资源是需要放到远程服务器加载。
addressable 热更新,unity,游戏引擎
8、加载Addressable资源
我们加载资源的时候,并不需要知道目标资源到底是在哪个Group中,也不需要知道这个Group到底是本地资源包还是远程资源包,统一通过资源的Addressable Name来加载,资源的Addressable Name在哪里看呢?
比如Capsule预设,在Inspector窗口中,可以看到它的Addressable Name为d,这个名字是我们自己改的,不然就是显示默认路径。
addressable 热更新,unity,游戏引擎

开始写代码,首先引入命名空间

using UnityEngine.AddressableAssets;

然后使用Addressables.LoadAssetAsync方法加载资源,监听Completed 回调,在回调中拿到资源然后进行操作,示例:

 public Button btn;
    public InputField inp;

    public RawImage img;
    public Button freeResBtn;
    public Texture2D tex2D;

    private AsyncOperationHandle<Texture2D> handle;
    private AsyncOperationHandle<GameObject> handle1;

    private GameObject gam;
void Start()
    {
        btn.onClick.AddListener(() => BtnClick(inp.text));
        freeResBtn.onClick.AddListener(() => BtnShif(inp.text));
        BtnClick("d");
    }
 private void BtnClick(string name)
    {

        //不能用这个方式加载,用它加载不能完全释放不能动态新增资源
        //Addressables.LoadAssetAsync<GameObject>(name).Completed += (obj) =>
        //{
        //    gam = obj.Result;
        //    Instantiate(gam);
        //};

        //用这个方式加载资源
        handle1 = Addressables.LoadAssetAsync<GameObject>(name);
        handle1.Completed += OnLoadCompleted1;
    }
     void OnLoadCompleted1(AsyncOperationHandle<GameObject> obj)
    {
        if (obj.Status == AsyncOperationStatus.Succeeded)
        {
            gam = obj.Result;
            gam=Instantiate(gam);
        }
        else
        {
            Debug.LogError("Failed to load asset: " + obj.OperationException.ToString());
        }

    }

把脚本挂在场景中,运行Unity,可以看到,正常加载了Capsule并实例化了
addressable 热更新,unity,游戏引擎
9、Addressable资源三个加载模式
上面是默认从Asset Database加载的,Addressables系统为了方便我们在Editor环境下方便测试,默认都是直接从Asset Database加载的,我们可以在Addressables Groups窗口的Play Mode Script中进行切换,建议编辑器环境下使用Use Asset Database (fastest)即可
addressable 热更新,unity,游戏引擎
Use Asset Database (fastest) 直接加载文件而不打包,快速但Profiler获取的信息较少
Simulate Groups (advanced) 在不打包的情况下模拟AssetBundle的操作
Use Exising Build(requires built groups) 实际上是从AssetBundle打包和加载

9.1、Use Asset Database (fastest)
在这个模式下,Addressables系统会直接从AssetDatabase加载资源,我们 不需要 Build打Addressable资源包,这个加载速度最快,建议在项目开发阶段使用这个模式,加载速度快

9.2、Simulate Groups (advanced)
这个模式下,也是不需要 Build打Addressable资源包的,是模拟资源包加载

9.3、Use Exising Build(requires built groups)
这个模式下,需要先执行Build打出Addressable资源包,它会根据Load Path去加载真正的AssetBundle文件并读取资源。如果不先Build,运行时会报错

10、加载远程Addressable资源
我们上面的Packed Assets是打成包外资源的,我们想要在Editor环境下测试远程加载,这个时候就需要先搭建一个Web服务器了,支持通过http请求来获取资源。Addressable系统已经帮我们做了一个Hosting Services工具,方便我们快速启动一个Web服务器。

点击菜单Window / Asset Management / Addressables / Hosting
addressable 热更新,unity,游戏引擎
接着点击Create / Local Hosting,创建一个本地Web服务器
addressable 热更新,unity,游戏引擎
然后勾选Enable
addressable 热更新,unity,游戏引擎

这样我们就开启了一个本地的服务器了,IP地址是我本机的局域网IP,我可以通过localhost进行访问,注意这里的端口号是58719。
我们可以看到,它对我们上文中提到的两个文件夹目录进行了Hosting

11、加载远程的资源
上面我们已经打了build资源包,这里直接改代码加载远程资源Cube,也就是名字c。

void Start()
    {
        //btn.onClick.AddListener(() => BtnClick(inp.text));
        //freeResBtn.onClick.AddListener(() => BtnShif(inp.text));
        BtnClick("c");
    }

运行效果,加载了远程资源c
addressable 热更新,unity,游戏引擎
12、看看Addressables是如何知道去哪里加载资源
我现在把资源托管到服务器上,我把RemoteLoadPath改为服务器的地址
addressable 热更新,unity,游戏引擎
这个打开方式
addressable 热更新,unity,游戏引擎
13、Group里的设置项和使用
addressable 热更新,unity,游戏引擎
图中1,如果要在程序运行状态下实时的更新刷新资源,就要把AssetBundleCRC选择Disables
图中2,BundleMode中有三个选项,第一个是把资源打到一起,第二个是把资源分开打成单个,第三个是根据Labels去打包,同一个Labels打到一起
图中3,BundleNamingMode是打出资源的名字,默认是第二个是按哈希值出包名,选第一个Filename是按自定义名字打包

14、打远程资源热更包
想要支持热更新,需要先开启Catalog,选中AddressableAssetSettings,然后勾选Build Remote Catalog
addressable 热更新,unity,游戏引擎
图中1,是定义打出的Catalog的自定义名字,不填就是哈希值
图中2,要远程资源热更需要勾选,选择自己定义的路径

实时动态热更和资源释放看这个

好了,后面在加其他的。。。。。文章来源地址https://www.toymoban.com/news/detail-689225.html

到了这里,关于【Unity使用addressables制作资源热更+实时动态热更基本记录】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity使用 Addressables 预加载所有资源,提现加载资源,发布webgl加载缓慢问题

    Addressables 我也是刚接触,知道的不是很多,基本的用法还是知道一些的 1 .在Window–Package Manager里找到Addressables进行安装   2.选择资源,点击Assets中的一个资源,在Inspector面板上就会出现一个勾选Assressable,也就是是否加入资源打包的分组,和AssetBundle分组是一个性质。选上以

    2023年04月08日
    浏览(34)
  • Unity AssetBundle资源热更插件

    取消 IsEditorMode 勾选: 采用AssetBundle的方式加载游戏内的资源 激活 IsEditorMode 勾选: 使用AssetDatabase.LoadAssetAtPath的方式加载 仅Editor 温馨提示: IsEditorMode 受到宏限制 如果你非 UNITY_EDITOR模式下 ( 当年在真机的时候 ) IsEditorMode强制为False 避免用户打包后忘记关了 新建一个AssetBundl

    2024年02月11日
    浏览(27)
  • Unity 3D模型展示框架篇之资源打包、加载、热更(二)

    本项目将整合之前Unity程序基础小框架专栏在Unity 3D模型展示项目基础上进行整合,并记录了集成过程中对原脚本的调整过程。增加了Asset Bundle+ILRuntime热更新技术流程。 本篇文章介绍如何对更新进行代码检测以及使用更新资源服务器进行资源热更新。 创建登录UI预制体 Log

    2023年04月20日
    浏览(33)
  • Unity Addressables资源管理 主设置面板

    Addressables资源管理总目录 位置1 位置2     这个是全局路径配置的选择 可以点击 Manager Profiles 打开路径配置面板 打包路径设置   Send Profiler Events  打开这个选项,才能在Event Viewer窗口看到资源的事件 Log Runtime Exceptions  记录运行时的异常日志   默认情况下Addressables只记录警告

    2024年02月13日
    浏览(36)
  • Unity 如何基于addressable来做资源管理

    一、什么是Addressable系统 Addressable系统是Unity 2018.3版本中推出的一种资源管理方案,它可以帮助我们更好地管理游戏中的资源。在以往的游戏开发中,我们通常使用Resources来进行资源加载,但是这种方式存在很多问题,比如加载速度慢、内存占用高等。Addressable系统可以解决这

    2024年02月16日
    浏览(22)
  • Unity 之 Addressable可寻址系统 -- 资源远程加载 | 资源预下载 -- 进阶(三)

    概述:实现方式是使用Unity的可寻址系统结合云资源分发(AA+CCD)的形式。本篇文章就来为讲解CCD的使用介绍,以及AA+CCD使用的示例。 在Hub界面的游戏云选项,可以看到官网介绍入口: CCD:全称Cloud Content Delivery,译为:云端资源分发。 Unity 推出首个用于实时游戏更新的端到端

    2024年01月16日
    浏览(26)
  • Unity 之 Addressable可寻址系统 -- 将Resources加载资源方式修改为Addressable加载 -- 实战(一)

    加载方式: Resources 使用同步加载方式;Resources 加载资源时,应用程序将会被阻塞,直到资源加载完成,这可能会导致应用程序出现卡顿或挂起的情况。 Addressables 使用异步加载方式。这意味着使用 Unity 而使用 Addressables 加载资源时,应用程序可以继续运行,而不会出现卡顿

    2024年02月05日
    浏览(27)
  • Unity 之 Addressable可寻址系统 -- 资源热更新 -- 进阶(四)

    概述:Unity可寻址系统的资源热更是我遇到过最简单的热更方式了。只需修改资源组然后发布资源热更即可。本篇文章就来为讲解AA的资源热更,并通过CCD实现资源热更完整流程。 Addressables 将资源的引用和打包分开处理,可加快运行模式下和运行版本的项目迭代。系统将资源

    2023年04月08日
    浏览(64)
  • Unity Addressables学习笔记(1)---创建远程服务器加载资源

    Unity Addressables学习笔记—汇总 Bulid Path选择RemoteBuildPath Load Path我选择了custom,地址是http://localhost:8080/WebGL/ 遇坑1 :最开始我选择的Build Path 是 LocalBuildPath,Load Path是custom的时候报错如下: 解决办法:把Build Path 改为RemoteBuildPath后才好,我也不知道为什么不能把本地的资源放到远程

    2024年02月14日
    浏览(23)
  • Unity 之 Addressable可寻址系统 -- 资源加载和释放 -- 进阶(二)

    概述:本篇文章从资源加载的方式和具体示例演示,为大家介绍可寻址资源系统的资源加载和资源释放。 同步异步相关概念: 同步:是指一个进程在执行某个请求的时候,如果该请求需要一段时间才能返回信息,那么这个进程会一直等待下去,直到收到返回信息才继续执行

    2024年02月02日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包