Unity新的资源管理系统 Addressable
正好学习到Unity新的资源管理系统 在这里给大家分享一下最近的一些想法
如果你也在学习 那么我这里可能有你需要的内容 (也可能没有)
经历的项目中 以前都是bundle去处理资源以及依赖关系,但是当内容过多时依赖关系及其不好处理(也可能是都这个样子)
这篇文章主要是实践 而非长篇大论的理论 我始终认为实践才是一个合格程序员的正途 废话不多说直接上干货
如果你想了解更细API请参考官网
一、新建unity工程导入Addressables
我用的2018.4.12 在这里导入 Window =>Package Manager
我这里用的1.8.3版本 点安装 我这里安装好了就没有安装了 (注意:不同版本有些功能位置可能不太一样 自己可以找一下 )
二、创建一个资源
我在Hierarchy中创建了一个Image加一个Text简单的一个资源
将资源做成一个prefab放入Resource_hot文件夹
选中Image 将Inspector面板的Addresable勾选
地址可以自己改一下,我这里去掉了Asset
至此资源的制作已经完成了 使用代码就可以加载了 将脚本挂在Canvas上 address填成上面我们修改的那个地址
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.ResourceManagement.AsyncOperations;
public class LoadGameObject : MonoBehaviour
{
public string address;
// Start is called before the first frame update
void Start()
{
Load();
}
void Load()
{
Addressables.LoadAssetAsync<GameObject>(address).Completed +=
(op) =>
{
if(op.Status == AsyncOperationStatus.Succeeded)
{
Debug.Log(op.Result as GameObject);
var go = Instantiate(op.Result as GameObject, Vector3.zero, Quaternion.identity, transform);
go.transform.localPosition = Vector3.zero;
}
};
}
}
但是我们是要测试本地热更资源 所以后续还会有一些内容
三、开启本地模拟服务器并配置Remote的地址
打开 Window => Asset ManageMent => Addressables => Hosting
点Create->Local Hosting
Port 填个端口,然后将Enable打勾✔
接下来设置RemotePath
打开Profiles窗口 Window => Asset ManageMent => Addressables => Profiles
将RemoteLoadPath改成http://[PrivateIpAddress]:[HostingServicePort]
其他地址不用修改
至此我们本地模拟服务器设置完成
四、配置资源
资源有了,模拟服务器也配置完成了 。接下来我们要配置一下资源,然后将资源放到我们要加载的路径
选中AddressableAssetSettings设置Build Path和Load Path 注意我标箭头的地方
选中Default Local Group 注意标箭头的配置
打开Groups窗口 Window => Asset ManageMent => Addressables => Groups
我这里没有将资源分组,使用的默认的分组 先将Play Mode Script 改成Use Exiting Build ,然后点Build->
New Build ->Default Build Script
到这里配置完成!接下来打个包测试一下。我图省事儿就打的exe
五、测试
打包完成运行!!
完美加载!没毛病!!
说好的热更资源呢?别急! 来了!
接下来我们来做一下资源更新
首先改一下资源
然后再打开Group窗口 Window => Asset ManageMent => Addressables => Groups
点Tools->Check for Content Update Restrictions
选择后点Apply Changes
然后点Group窗口的Build->Update a Previous Build
ok 我们再运行一下exe
没毛病!
至此本地模拟热更新就ok了 如果有不明白的小伙伴欢迎私信!
谢谢大家