Unity可寻址系统--Addressable AssetSystem

今天是2020年的第一天,祝大家新年快乐。

前些时间看到Unity官方推得 可寻址系统Addressable AssetSystem,新的资源管理加载系统。据官方说以后Unity的资源加载模块重心将会放到该系统上,又是一个亲儿子。这几天抽时间看了一下,其原理也是在AB包的基础上进行了一层高级的封装。之前 我们游戏开发过程中,需要自己去根据游戏写一套自己的资源管理加载系统,这一块牵扯到AssetBundle相关的知识,没有一定前端开发经验的,可能写起来比较困难,毕竟牵扯到后期资源的热更新。而新的可寻址系统,则是帮我们写好的一套资源管理加载系统,免去了我们直接对AB包的操作。在尝试使用过后,自我感觉目前还 没有 达到想象中的那么好用。

可寻址,这个地址 默认是文件 在工程中的路径,可修改。通过引用计数 去管理 资源的加载次数,当每次释放该资源的时候 引用计数减减,小于等于0的时候,卸载该资源。更加方便了内存的管理。

Unity在加载资源的时候,先去检查本地有没有资源,没有的话,会去资源服务器地址上加载,缓存到本地。新的可寻址系统,提供了三种打包方式。

第一种模式:资源的打包和加载都是本地,速度很快,开发阶段可以使用该模式。

第二种模式:本地虚拟一个服务器环境,进行加载测试

第三种模式:真正的 将资源放在服务器上进行加载测试

当打包模式切换到 第三种之后,一定要先打包,在运行,不然会报错。路径也要换成远程的

该系统的资源加载都是异步操作的。Unity内除了脚本,其他的均可以被标记为可寻址资源,包括场景,系统会自动加载场景中的物体。

1.AssetReference.InstantiateAsync 异步实例化物体

using UnityEngine;
using UnityEngine.AddressableAssets;
public class Test1 : MonoBehaviour
{
    public AssetReference m_ArcherObject;

    void Start()
    {
        m_ArcherObject.InstantiateAsync();
    }
}

在面板指定相应的物体

2.LoadAssetAsync 异步资源加载,通过绑定一个回调函数,在资源加载完毕,自动执行回调。

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

public class Test2 : MonoBehaviour
{
    void Start()
    {
        Addressables.LoadAssetAsync<GameObject>("Model1").Completed += OnLoadedComplete;
    }

    private void OnLoadedComplete(AsyncOperationHandle<GameObject> obj)
    { 
        if (res.Status==AsyncOperationStatus.Succeeded)
        {
            GameObject ob = obj.Result;
            ob= Instantiate(ob);
            ob.name = "TestModel1";
        }
    }
}

3. Addressables.InstantiateAsync 可以直接执行实例化物体

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

public class Test2 : MonoBehaviour
{
    void Start()
    {
        Addressables.InstantiateAsync("Model1").Completed += (a) =>
        {
            GameObject obj = a.Result;
            obj.name = "testModel1";
        };   
    }

4.根据Lable 进行资源的加载,它会将所有带有该标签的 资源 查询放到一个list里面,再去使用加载函数 去加载出来。该接口会去查询资源的地址,返回过来。

using UnityEngine.ResourceManagement.ResourceLocations;
    private void Start()
    {
        Addressables.LoadResourceLocationsAsync("Models").Completed += OnResLoaded;
    }

5.多图精灵加载,以前的方法,返回的是一个集合。新的加载方式,可以直接去加载大图中的精灵

Addressables.LoadAssetAsync<IList<Sprite>>("Numbers").Completed += (a) =>
    {
        Debug.Log(a.Result.Count);
    };
    Addressables.LoadAssetAsync<Sprite>("Numbers[数字_3]").Completed += (a) =>
    {
        TestImage.sprite = a.Result;
    };

6.资源的热更,可以直接去打 增量包,系统会自动检测出 哪些文件发生了改变,以前 我们可能会去检测资源的Crc,然后去比对前一个版本的资源清单,比对得出发生改变的资源,新的系统 会自动完成,打出增量包,只需要将增量包放到服务器,Unity在加载资源的时候,会自动去加载新的资源。目前觉得有些地方很麻烦,每次打增量包的时候,总会多出新的Asset资源

可寻址系统还加入了资源管理的Profile面板,很方便查看资源的加载情况。

目前感觉在资源的热更上,还需要优化,还是需要我们自己去处理热更的流程更方便。期待官方的后期优化。Unity的每次更新,真的有很大变化,自从2018之后,真的是需要去关注每次版本的更新,了解新的知识。

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值