Addressable入门篇
配置Addressable
在unity2018.2及以上可以在Window->package Manager->中搜索Addressable并安装
安装完成后,所有的资源都会有一个可勾选的Addressable
当勾上后就会被Addressable系统管理
在Window->asset mangment->addressable->Groups查看和管理资源
AddressableName资源:
默认AddressableName就是资源在Assets下的路径==Path,可以直接F2重命名,这里简称key
Addressale加载资源就是通过这个key
key可以重复,加载单个时,如果key重复,那么加载的就是是第一个,读取多个时,可以加载所有相同可以的资源
labels标签:
每个资源可以设置多个标签,读取资源时,除了通过name读取还可以通过label读取label也可以当key用,可以加载单个和多个,加载顺序和key一样,多个label时加载单个为第一个
打资源包(单机本地)
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返回的实例化对象
该方法会销毁该物体
一些简单的工具方法:
usingSystem.Collections;
usingSystem.Collections.Generic;
usingUnityEngine;
usingUnityEngine.AddressableAssets;
usingUnityEngine.ResourceManagement.AsyncOperations;
usingUnityEngine.ResourceManagement.ResourceProviders;
usingUnityEngine.SceneManagement;
public class AddressableUtil
{
///
///Addressable加载资源
///
/// 资源类型
///
///
public voidLoadObjRun(stringkey, LoadObj run =null)
{
Addressables.LoadAssetAsync(key).Completed += (obj) =>
{
run?.Invoke(obj.Result);
Addressables.Release(obj);
};
}
///
///返回操作句柄,自己控制(PercentComplete:完成百分比)
///
///
///
publicAsyncOperationHandle LoadSceneRun(stringkey)
{
returnAddressables.LoadSceneAsync(key);
}
///
///Addressable加载场景
///
///
///
public voidLoadSceneRun(stringkey, LoadObj run =null)
{
Addressables.LoadSceneAsync(key).Completed += (obj) =>
{
run?.Invoke(obj.Result.Scene);
Addressables.Release(obj);
};
}
public delegate void LoadObj(T obj);
}
public static class KUOZ
{
///
///销毁释放Addressable实例化的游戏对象
///
///
public static voidReleaseInstance(thisGameObject obj)
{
Addressables.ReleaseInstance(obj);
}
}