Unity Addressable入门篇

Addressable入门篇

配置Addressable

  1. 在unity2018.2及以上可以在Window->package Manager->中搜索Addressable并安装

 

  1. 安装完成后,所有的资源都会有一个可勾选的Addressable

 

当勾上后就会被Addressable系统管理

  1. 在Window->asset mangment->addressable->Groups查看和管理资源

 

AddressableName资源:

默认AddressableName就是资源在Assets下的路径==Path,可以直接F2重命名,这里简称key

Addressale加载资源就是通过这个key

key可以重复,加载单个时,如果key重复,那么加载的就是是第一个,读取多个时,可以加载所有相同可以的资源

labels标签:

每个资源可以设置多个标签,读取资源时,除了通过name读取还可以通过label读取label也可以当key用,可以加载单个和多个,加载顺序和key一样,多个label时加载单个为第一个

  1. 打资源包(单机本地)

Content Packing&Loading

选择BuildPath->LocalBuildPath:运行地址,LoadPath->LocalLoadPath:读取运行包地址

 

打包:build->new build->Default build script

 

打apk包后,加载的资源就是这里

热更(本地模拟):

打开 Window => Asset ManageMent => Addressables => Hosting点Create->Local Hosting Port 填个端口,然后将Enable打勾✔ 

 将RemoteLoadPath改成http://[PrivateIpAddress]:[HostingServicePort]

当资源更新后:

Window => Asset ManageMent => Addressables => Groups 点Tools->Check for Content Update Restrictions

弹出文件框,要求之前的bin文件,有android和window

选择后点Apply Changes 然后点Group窗口的Build->Update a Previous Build

==================================我是分割线===================================

加载API:

using UnityEngine.AddressableAssets;

using UnityEngine.ResourceManagement.AsyncOperations;

 

AsyncOperationHandle句柄(异步加载时的控制器,里面记录了加载的所有信息,包括状态、进度等)

 

当包中有多个相同的key或者label时,返回的是第一个

//根据key加载一个资源(这个key可以是AddressableName也可以是label标签)

Addressables.LoadAssetAsync("key");

//根据key实例化一个资源(这个key可以是AddressableName也可以是label标签)

Addressables.InstantiateAsync("key");

//根据key返回多个资源(这个key可以是AddressableName也可以是label标签)

Addressables.LoadAssetsAsync(“key”);

//根据key加载场景(这个key可以是AddressableName也可以是label标签)

Addressables.LoadSceneAsync(“key”)

卸载API:

Addressables.Release()参数是句柄,加载场景也是用的这个句柄

Addressables.ReleaseInstance()参数是通过Addressables.InstantiateAsync返回的实例化对象

该方法会销毁该物体

一些简单的工具方法:

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

using UnityEngine.AddressableAssets;

using UnityEngine.ResourceManagement.AsyncOperations;

using UnityEngine.ResourceManagement.ResourceProviders;

using UnityEngine.SceneManagement;

 

public class AddressableUtil 

{

    /// <summary>

    /// Addressable加载资源

    /// </summary>

    /// <typeparam name="T">资源类型</typeparam>

    /// <param name="key"></param>

    /// <param name="run"></param>

    public void LoadObjRun<T>(string key, LoadObj<T> run = null)

    {

        Addressables.LoadAssetAsync<T>(key).Completed += (obj) =>

        {

            run?.Invoke(obj.Result);

            Addressables.Release(obj);

        };

    }

 

    /// <summary>

    /// 返回操作句柄,自己控制(PercentComplete:完成百分比)

    /// </summary>

    /// <param name="key"></param>

    /// <returns></returns>

    public AsyncOperationHandle LoadSceneRun(string key)

    {

        return Addressables.LoadSceneAsync(key);

    }

 

    /// <summary>

    /// Addressable加载场景

    /// </summary>

    /// <param name="key"></param>

    /// <param name="run"></param>

    public void LoadSceneRun(string key, LoadObj<Scene> run = null)

    {

        Addressables.LoadSceneAsync(key).Completed += (obj) =>

        {

            run?.Invoke(obj.Result.Scene);

            Addressables.Release(obj);

        };

    }

 

    public delegate void LoadObj<T>(T obj);

 

}

 

public static class KUOZ 

{

    /// <summary>

    /// 销毁释放Addressable实例化的游戏对象

    /// </summary>

    /// <param name="obj"></param>

    public static void ReleaseInstance(this GameObject obj)

    {

        Addressables.ReleaseInstance(obj);

    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值