跟着一步步操作即可

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
}
}

预加载代码

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

记得点赞 收藏哦 ! 谢谢

搜索

复制

Unity简单使用 Addressables远端打包流程的更多相关文章

  1. In House打包流程

    在一个app历经数周持续开发和多个版本快速内部迭代之后,当我们需要把这个版本发布到我们实际应用场景中,面对我们真实用户去say hi时,如果自身产品在发布(内测版本)之前确实找到一些潜在切相对稳定的种 ...

  2. Android APK打包流程

    简单build流程图 官网给了我们一张非常简单的编译.打包.apk生成内容以及签名的图片.图片大体介绍了从Project到运行到设备或者模拟器的一个大体流程,我们也从中看到一个完整的apk包含如下内容 ...

  3. 从 Android 源码到 apk 的编译打包流程

    文中涉及到的工具所在目录:Android/sdk/build-tools.下面开始分解并逐步实现对源码的打包. 编译流程 1. 生成仅包含资源文件的 apk 包和 R.java 文件 根据资源文件和 ...

  4. APK 的前世今生:从 Android 源码到 apk 的编译打包流程

    最近想要研究热修复的原理,并自己实现一套简单的热修复框架(音视频的坑刚挖好就又挖另一个坑了2333),已经在看书入门 c++,方便后续查看业内一些知名热修复框架的源码,另外在涉及编译期/运行时修改代码 ...

  5. [Android Pro] Android 打包流程

    Android 打包流程: 官网地址:http://developer.android.com/tools/building/index.html 具体的打包步骤如下: 1:生成R.java类文件:E ...

  6. 一个简单的CS系统打包过程图文版

    一个简单的CS系统打包过程图文版 1.     打包内容 1.1.  此次打包的要求和特点 主工程是一个CS系统: 此CS系统运行的先决条件是要有.Net Framework 3.5: 主工程安装完成 ...

  7. webpack学习--创建一个webpack打包流程

    创建一个webpack打包流程 首先安装webpack插件 mkdir webpack-demo && cd webpack-demo npm init -y npm install ...

  8. cordova/ionic打包流程

    ionic android 手工打包指令手册 [工作平台要求] 安装 node.js.cordova.ionic(非必须) 等前端相关软件与组件(1)安装 Java-SDK,正确配置系统环境变量 JA ...

  9. 一个简单的Eclipse调试Debug流程(四)

    本文链接:https://blog.csdn.net/u011781521/article/details/55000066    http://blog.csdn.net/u010075335/ar ...

  10. Android Activity启动流程, app启动流程,APK打包流程, APK安装过程

    1.Activity启动流程 (7.0版本之前) 从startActivity()开始,最终都会调用startActivityForResult() 在该方法里面会调用Instrumentation. ...

随机推荐

  1. CSS-@规则(At-rules)常用语法使用总结

    At-rules规则是目前CSS中一种常见的语法规则,它使用一个"@"符号加一个关键词定义,后面跟上语法区块,如果没有则以分号结束即可. 这种规则一般用于标识文档.引入外部样式.条 ...

  2. 学习ASP.NET Core Blazor编程系列二十三——登录(3)

    学习ASP.NET Core Blazor编程系列文章之目录 学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应 ...

  3. CentOS7登录到控制台后无网络

    1.找到网卡配置文件 ll /etc/sysconfig/network-scripts/ | grep ifcfg-en 2.编辑配置文件开启系统启动时自动启动网络,并保存文件 vi /etc/sy ...

  4. 强大的word插件,让工作更高效:不坑盒子 2023版

    不坑盒子简介 很多朋友在工作过程中需要对Word文档进行编辑处理,如果想让Word排版更有效率可以试试小编带来的这款不坑盒子软件,这是一个非常好用的插件工具,专门应用在Word文档中,支持Office ...

  5. 学习Java Day20

    类的导入的第一种方式就是使用完全限定名,就是包名后面跟着类名 java.time.LocalDate totay=java.time.LocalDate.now(); 另一种可以直接用import j ...

  6. JavaScript的闭包和作用域

    作用域相关 作用域的概念: 作用域是在运行时代码中的某些特定部分中变量,函数和对象的可访问性.换句话说,作用域决定了代码区块中变量和其他资源的可见性: 作用域的类型: 全局作用域: 最外层函数和在最外 ...

  7. 推荐一款.Net Core开发的后台管理系统YiShaAdmin

    若依(RuoYi)是码云上一款精美的开源快速开发平台,作者毫无保留给个人及企业免费使用.RuoYi目前有三个版本:普通版本(RuoYi).前后端分离版本(RuoYi-Vue).微服务版本(RuoYi- ...

  8. js原型链污染详解

    前言 之前打某湖论剑,两道js的题,给我整懵逼了,发现以前都没对js做过多少研究,趁着被毒打了,先研究一波js原型链,未雨绸缪. 基础 protype 首先我们研究js原型链,得搞明白原型是什么,这里 ...

  9. 流量加密之:MSF流量加密

    流量加密之:MSF流量加密 目录 流量加密之:MSF流量加密 1 背景 2 生成SSL证书 3 使用MSF生成带证书的后门 4 验证流量 1 背景 在MSF中生成shell,并上线运行时.都是通过ht ...

  10. Vulhub 漏洞学习之:ECShop

    Vulhub 漏洞学习之:ECShop 目录 Vulhub 漏洞学习之:ECShop 1 ECShop 2.x/3.x SQL注入/远程命令执行漏洞 1.1 环境安装 1.2 漏洞产生原因 1.3 漏 ...