跟着一步步操作即可

1.先打开一个unity项目

2.导入插件资源包地址,点击如图片所示

3.最后点击导入就行了也就是第三步 Install

4.这是在点击 Window 安装后Window/多了一个Asset Management ,顺着点击创建Groups

5.  点击Create Addressables Settings按钮

此时会生成如下图文件夹里面很多配置文件 (如下图所示)

6. 此时会弹出来一个界面

7. 属性设置成如下图  一个远端打包地址,一个远端加载地址

8.点击如下图所示,属性也设置成下图所示 也是一个打包地址一个加载地址  (1)

开启Build Remote Catalog  (2)

想要支持热更新,需要先开启Catalog,选中AddressableAssetSettings,然后勾选Build Remote Catalog,如下,

(1)                                                                                                                                              (2)

       

9.设置服务器地址 点击框框按钮

10.  弹出来如下图 修改框里面为服务器文件夹的地址即可 其他不改

11.  导入模型制成预制体

12.  创建模型文件夹 (Model)

13.  把模型放到Model文件夹下 (模型拖到文件夹下)

14.  设置一下模型属性  选择之后点击Apply

15.  把模型拖到Hierarchy下面   (如下图所示)

16. 解组

17.  创建预制体文件夹 (Prefabs)

18. 把刚刚解组的模型拖到Prefabs文件夹下面即可

19. 选择预制体 给Addressable打上勾

20.  此时 可以看到 Groups已经添加进来了

21. 选择加载方式

play Mode Script有三个选项,第一个是快速加载(faster),可以在Unity编辑器中测试,第二个是模拟加载(advanced),Unity模拟了一个远程加载的过程,第三个Build加载(requires),程序打包的时候,先要选择他,对资源进行打包

22.  然后按顺序点击打包即可

23.  打包完成找到文件

24.  箭头指示就是打包的文件地址路径

25.  找到如下文件

26.   因为是webgl所以找到webgl文件夹

这就是打包的AB包了  全部放到服务器上即可

最后是加载资源的代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AddressableAssets; /// <summary>
/// 注释的代码也都是能运行的
/// </summary>
public class Main : MonoBehaviour
{
//public AssetReference reference;
public string path;
private GameObject cubeObj;
private UnityEngine.ResourceManagement.AsyncOperations.AsyncOperationHandle<GameObject> handle;
// Start is called before the first frame update
void Start()
{
// reference.LoadAssetAsync<GameObject>().Completed += (obj) =>
//{
// GameObject spherePrefab = obj.Result;
// // 实例化
// GameObject sphereObj = Instantiate(spherePrefab);
//}; //reference.InstantiateAsync().Completed += (obj) =>
//{
// GameObject spherePrefab = obj.Result;
// // 实例化
// GameObject sphereObj = Instantiate(spherePrefab);
//}; //加载设置了default标签的物体
//Addressables.LoadAssetAsync<GameObject>("default").Completed += (obj) =>
//{
// // 预设
// GameObject spherePrefab = obj.Result;
// // 实例化
// GameObject sphereObj = Instantiate(spherePrefab);
//}; //第一种
//Addressables.LoadAssetAsync<GameObject>("Assets/Prefabs/盛世公馆3.2.prefab").Completed += (opt) =>
//{
// if (opt.Status == UnityEngine.ResourceManagement.AsyncOperations.AsyncOperationStatus.Succeeded)
// {
// GameObject panel1 = Instantiate(opt.Result); // } //}; //第二种
//Addressables.InstantiateAsync("Assets/Prefabs/盛世公馆3.2.prefab").Completed += (obj) =>
//{
// GameObject spherePrefab = obj.Result;
//}; //第三种
handle = Addressables.LoadAssetAsync<GameObject>("Assets/Prefabs/Cube.prefab");
handle.Completed += (obj) =>
{
// 实例化Cube
cubeObj = Instantiate(obj.Result);
}; } /// <summary>
/// 释放资源
/// </summary>
public void Release_Resource()
{
if (null != cubeObj)
Destroy(cubeObj); // 释放资源
Addressables.Release(handle);
} }

提前检测更新并下载 *(预加载)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.ResourceManagement.AsyncOperations;
using UnityEngine.AddressableAssets.ResourceLocators;
using UnityEngine.UI; // 检测更新并下载资源
public class CheckUpdateAndDownload : MonoBehaviour
{
/// <summary>
/// 显示下载状态和进度
/// </summary>
public Text updateText; /// <summary>
/// 重试按钮
/// </summary>
public Button retryBtn; void Start()
{
retryBtn.gameObject.SetActive(false);
retryBtn.onClick.AddListener(() =>
{
StartCoroutine(DoUpdateAddressadble());
}); // 默认自动执行一次更新检测
StartCoroutine(DoUpdateAddressadble());
} IEnumerator DoUpdateAddressadble()
{
AsyncOperationHandle<IResourceLocator> initHandle = Addressables.InitializeAsync();
yield return initHandle; // 检测更新
var checkHandle = Addressables.CheckForCatalogUpdates(true);
yield return checkHandle;
if (checkHandle.Status != AsyncOperationStatus.Succeeded)
{
OnError("CheckForCatalogUpdates Error\n" + checkHandle.OperationException.ToString());
yield break;
} if (checkHandle.Result.Count > 0)
{
var updateHandle = Addressables.UpdateCatalogs(checkHandle.Result, true);
yield return updateHandle; if (updateHandle.Status != AsyncOperationStatus.Succeeded)
{
OnError("UpdateCatalogs Error\n" + updateHandle.OperationException.ToString());
yield break;
} // 更新列表迭代器
List<IResourceLocator> locators = updateHandle.Result;
foreach (var locator in locators)
{
List<object> keys = new List<object>();
keys.AddRange(locator.Keys);
// 获取待下载的文件总大小
var sizeHandle = Addressables.GetDownloadSizeAsync(keys.GetEnumerator());
yield return sizeHandle;
if (sizeHandle.Status != AsyncOperationStatus.Succeeded)
{
OnError("GetDownloadSizeAsync Error\n" + sizeHandle.OperationException.ToString());
yield break;
} long totalDownloadSize = sizeHandle.Result;
updateText.text = updateText.text + "\ndownload size : " + totalDownloadSize;
Debug.Log("download size : " + totalDownloadSize);
if (totalDownloadSize > 0)
{
// 下载
var downloadHandle = Addressables.DownloadDependenciesAsync(keys, true);
while (!downloadHandle.IsDone)
{
if (downloadHandle.Status == AsyncOperationStatus.Failed)
{
OnError("DownloadDependenciesAsync Error\n" + downloadHandle.OperationException.ToString());
yield break;
}
// 下载进度
float percentage = downloadHandle.PercentComplete;
Debug.Log($"已下载: {percentage}");
updateText.text = updateText.text + $"\n已下载: {percentage}";
yield return null;
}
if (downloadHandle.Status == AsyncOperationStatus.Succeeded)
{
Debug.Log("下载完毕!");
updateText.text = updateText.text + "\n下载完毕";
}
}
}
}
else
{
updateText.text = updateText.text + "\n没有检测到更新";
} // 进入游戏
EnterGame();
} // 异常提示
private void OnError(string msg)
{
updateText.text = updateText.text + $"\n{msg}\n请重试! ";
// 显示重试按钮
retryBtn.gameObject.SetActive(true);
} // 进入游戏
void EnterGame()
{
// TODO
}
}

预加载代码

简单记录一下,不喜勿喷!

记得点赞 收藏哦 ! 谢谢

搜索

复制

最新文章

  1. HttpCookie加匿名类实现多语言
  2. linux命令学习(一)—— 文件和目录管理命令
  3. 剑指Offer:面试题20——顺时针打印矩阵(java实现)
  4. 夺命雷公狗---node.js---6net模块玩telnet通信(下)
  5. 上海某(hong)冠笔试题
  6. CSS3中更灵活的布局方式
  7. 15个不起眼但非常强大的 Vim 命令
  8. dokcer 运行和进入容器
  9. lnmp1.0 升级php.5.4.28 后出错 Nginx 502 Bad Gateway
  10. Tenured 区并发垃圾回收器CMS介绍
  11. Android SDK国内更新
  12. (luogu P1383)高级打字机
  13. Bate敏捷冲刺每日报告--day3
  14. java.sql.SQLException: null, message from server: &quot;Host &#39;192.168.126.100&#39; is not allowed to connect to this MySQL server&quot;
  15. 代码调用t.cn接口生成短址
  16. php伪造ip头
  17. BOM模型中常用对象 定义计数器 网页跳转 网页前进后退
  18. POJ 2187 - Beauty Contest - [凸包+旋转卡壳法][凸包的直径]
  19. sql 把多列内容合并
  20. redis使用哈希槽实现集群

热门文章

  1. OpenStack命令行参考
  2. Backbone前端框架解读
  3. java 金额计算
  4. Django中需要修改配置
  5. Vue31 消息订阅和发布
  6. spring-in-action_day02
  7. Golang HTTP编程及源码解析
  8. NodeJs设置全局缓存路径 和 安装CNPM
  9. let 和 var 的区别
  10. dotnet core 托管