Unity addressables实现模型资源热更新

        最近有个项目要用到热更新,很久之前用过assets bundle,很长时间没用过也不太会了,于是就想好好学学。

        我这边的需求是只需要实现模型资源的热更新,因此assets bundle是够用的,不需要lua啥的,assets bundle之前用起来感觉不太好用,于是就想尝试下addressables,了解了下,发现确实还是挺好用的。

        废话不多说,基础的操作就不说了,我是按B站上的一个教程操作,但在操作的过程中有一些问题,在这里记录一下。视频在这:【Unity资源管理】Addressables实现资源热更新_哔哩哔哩_bilibili【Unity资源管理】Addressables实现资源热更新, 视频播放量 2958、弹幕量 0、点赞数 88、投硬币枚数 47、收藏人数 133、转发人数 6, 视频作者 程序员晨树, 作者简介 Unity游戏开发, 资源分享 QQ: 1025775816 ,相关视频:【Unity资源管理】Addressables让资源管理更轻松,【用Unity搭建自己的游戏框架】旧工程接入HybridCLR(上),【用Unity搭建自己的游戏框架】YooAsset资源管理-05.代码实现热更流程,【用Unity搭建自己的游戏框架】YooAsset资源管理-01.安装和配置,unity 2D游戏开发教程124:(角色血条开发④),【用Unity搭建自己的游戏框架】YooAsset资源管理-03.资源热更,【用Unity搭建自己的游戏框架】【HybridCLR+YooAsset】完美实现C#热更新(下),【Unity URP】项目基础配置,《吗喽周跃》——大二本科生期末Unity作业,【用Unity搭建自己的游戏框架】【HybridCLR+YooAsset】完美实现C#热更新(上)icon-default.png?t=N7T8https://www.bilibili.com/video/BV1qu4y1n7dM/?spm_id_from=333.880.my_history.page.click&vd_source=171efec77926202e70ce2a06ba44fa7b

搭建本地资源服务器 

        首先,我遇到的第一个问题就是我没有服务器,资源没地方放。这也简单,用Nodejs搭建一个本地的服务器就行了。

安装nodejs

        第一步要安装nodejs,这个网上教程一堆,大家自己搞定吧;

创建项目目录

        在硬盘里创建一个文件夹,用来存放热更新要用到的资源;

初始化Node.js项目

        打开cmd切换到这个文件夹,输入:npm init -y 初始化一个新的Node.js项目,这将创建一个 package.json 文件,其中包含项目的基本信息;

 安装 http-server 模块

  http-server 是一个简单的、零配置的命令行HTTP服务器,适合用于本地开发。接着在控制台输入:npm install http-server -g

启动本地HTTP服务器

        接着输入:http-server -p 8080,显示如下内容表示启动成功;

         随便创建个html文件放在创建好的文件夹下,写点代码,验证下;

        没啥毛病,接下来将打包好的资源放到这个文件夹下就可以了。 

打包资源

        打包资源之前,先把Addressables Profiles 里的Remote改成Custom,BuildPath和LoadPath改成下图(根据自己实际的来); 

        按照视频的操作,将一个模型资源拖拽到Local Group下面;

        然后创建一个脚本,代码如下;

using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.ResourceManagement.AsyncOperations;

public class SpawnObjectAddressables : MonoBehaviour
{
    [SerializeField] private AssetReference reference;

    string rootPath = "Assets/WONILMAX/SCi-fi_Grenade/Prefabs/Car.prefab";


    // Update is called once per frame
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.T))
        {
            AsyncOperationHandle<GameObject> operationHandle = reference.LoadAssetAsync<GameObject>();

            operationHandle.Completed += OperationHandle_Completed;
        }

        if(Input.GetKeyDown(KeyCode.W))
        {
            AsyncOperationHandle<GameObject> operationHandle= Addressables.LoadAssetAsync<GameObject>(rootPath);
           
            operationHandle.Completed += OperationHandle_Completed;
        }
    }

    private void OperationHandle_Completed(AsyncOperationHandle<GameObject> operationHandle)
    {
        if(operationHandle.Status==AsyncOperationStatus.Succeeded)
        {
            Instantiate(operationHandle.Result);
        }
        else
        {
            Debug.Log("Failed to load!");
        }
    }
}

        脚本中我们可以看到,按T键生成刚才已经拖拽到 Local Group下面的模型,按W键要生成的模型我先不设置。

        将软件发布一下,发布完成后我们可以看到,在ServerData文件夹下自动创建了一个StandaloneWindows64的文件夹,里面有三个文件;

        直接将这个文件夹拷贝到本地服务器的地址下;

        运行程序,按T键生成了模型,按W键没有反应;

        接下来将另一个模型也拖拽到 Local Group‘;点击Build旁的小三角,选择“Update a Previus Build”,选择windows,选择addressables_content_state.bin,点击“打开”,unity会更新资源;

        结束后SeverData里面会生成新的bundle的文件和替换掉另外两个文件,把这三个文件拷贝到服务器的文件夹下,删掉服务器中就得bundle文件;

        运行之前打包好的软件,按T键生成了模型,按W键同样也生成了,没毛病。

        好了,这样就实现了简单的模型资源热更新,实际应用过程中大家自由扩展。就这样吧。有用的话点个赞吧 !

        转载请注明出处:https://blog.csdn.net/enjoySoledad/article/details/140561360?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22140561360%22%2C%22source%22%3A%22enjoySoledad%22%7Dicon-default.png?t=N7T8https://blog.csdn.net/enjoySoledad/article/details/140561360?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22140561360%22%2C%22source%22%3A%22enjoySoledad%22%7D

  • 13
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值