一篇文章学会YooAsset资源热更新的初始化

这篇具有很好参考价值的文章主要介绍了一篇文章学会YooAsset资源热更新的初始化。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

零、导入YooAsset

0.注意结合官方文档一起看,他写的很清晰

官方文档

1.UPM导入

在ProjectSetting里找到这个,这么填
一篇文章学会YooAsset资源热更新的初始化

package.openupm.cn
https://package.openupm.cn
com.tuyoogame.yooasset

然后在PackageManager里,选择MyRegistry ,导入YooAsset
一篇文章学会YooAsset资源热更新的初始化

本文只探讨到1.4.17,再高不支持了,本文全部代码均已验证正确

一、编辑器

0.创建YooAsset设置文件

一篇文章学会YooAsset资源热更新的初始化
在使用这些东西之前,我们需要在Project面板右键,选择YooAsset/Create Setting创建这个文件
然后MainfestFileName就是我们的资源清单文件名,(不改也没事,不影响使用,只是名字)一篇文章学会YooAsset资源热更新的初始化一篇文章学会YooAsset资源热更新的初始化

1.AssetBundle Collector

一篇文章学会YooAsset资源热更新的初始化
第一个是是否显示包,第二个是是否采用中文,第三个是是否开启寻址,第四个是在包名前面加东西保证包名唯一。
接下来我们把前三个打勾,按下面的加号创建一些东西。
一篇文章学会YooAsset资源热更新的初始化
其中Package就是包了,Group是分组,而Collector是收集器。
我们能编写自定义的收集规则,当Collector选择目录时,我们可以用自己的脚本来控制选择什么样的资源。

我们简单选择几个资源
一篇文章学会YooAsset资源热更新的初始化

2. Builder

一篇文章学会YooAsset资源热更新的初始化
第二个是构建管线,默认是默认的,否则可以改成可编程的(不介绍)。
第三是构建模式,ForceRebuild会删除原来的AB,重新打新的
Incremental是增量更构建,也就是打出来的包是多出来的资源,不会移除也不会生成之前的,所以在更新到CDN时可以直接覆盖到原来的包上,或者差异分析上传
然后是DryRun,只会产生一些Mainfest文件,不会打包,用于演练,
接下来是Simulate,需要配合特殊的初始化方式才能模拟构建,只在编辑器有效一篇文章学会YooAsset资源热更新的初始化
然后是版本号,这个版本号随着时间自动生成,不需要处理
Compressaion是压缩方式,LZ4时间略微优异,性价比比较高,LZMA保证最大的压缩率,其实差距不大,太大不会放在这里,说明都可用。
Encryption是加密方式,需要自己写一个,好像要实现一个接口,在YooAsset官方文档有的
最后一个就是是否拷贝到StreamingAsset
一篇文章学会YooAsset资源热更新的初始化
我们能根据Group的标签区分。

3.Reporter

一篇文章学会YooAsset资源热更新的初始化
在目录里,Bundles是打包输出路径,SandBox是AB从服务器下载缓存的路径
我们进入Reporter,选择导入,选择这个打出的以时间命名的包下面的一个文件
一篇文章学会YooAsset资源热更新的初始化
一篇文章学会YooAsset资源热更新的初始化
一篇文章学会YooAsset资源热更新的初始化
就这个用处,简单吧,还有一个调试器,这个是在运行时检测资源直接有没有循环引用问题的,基于引用计数的方案最害怕这个。

二、代码

0.每一个模式都要做的初始化

// 初始化资源系统
YooAssets.Initialize();
// 创建默认的资源包,这里是需要先在Collector里创建同名Package的
var package = YooAssets.CreatePackage("DefaultPackage");
// 设置该资源包为默认的资源包,可以使用YooAssets相关加载接口加载该资源包内容。
YooAssets.SetDefaultPackage(package);

0.1 选择一个运行模式

 public EPlayMode PlayMode = EPlayMode.EditorSimulateMode;
switch (PlayMode)
        {
            case EPlayMode.EditorSimulateMode:
                {
                   //开启协程
                    break;
                }
            case EPlayMode.OfflinePlayMode:
                {
                //开启协程
                    break;
                }
            case EPlayMode.HostPlayMode:
                {
                           //开启协程
                    break;
                }
        }

1.编辑器模拟运行

执行完这个协程之后,就可以任意加载,不过注意只能在编辑器里用,传入的package就是上面创建的DefaultPackage

  private IEnumerator EditorInitializeYooAsset(ResourcePackage package)
    {
        var initParameters = new EditorSimulateModeParameters();
        initParameters.SimulateManifestFilePath = EditorSimulateModeHelper.SimulateBuild("DefaultPackage");
        yield return package.InitializeAsync(initParameters);
    }

2. 单机模式运行

这个运行模式要求在打AB包的时候,在调整最后一个设置选择,把AB包拷贝到streamingAsset/buildIn里面,不然加载资源会失败!!注意不是自己手动拷贝

 private IEnumerator SingleInitializeYooAsset(ResourcePackage package)
    {
        var initParameters = new OfflinePlayModeParameters();
        yield return package.InitializeAsync(initParameters);
    }

3.联网模式运行

(0)本地测试环境

首先我们从网上找个软件叫做HFS,Http File Server,搜一下就有。
一篇文章学会YooAsset资源热更新的初始化
把右边的FTP文件夹拖进去。我们就能访问这个地址了
一篇文章学会YooAsset资源热更新的初始化
然后把我们的AB包扔进去

(1)初始化资源包

public string netPath = "http://127.0.0.1:9999/FTP/2023-04-20-1108";


 private IEnumerator NetInitializeYooAsset(ResourcePackage package)
    {
        var initParameters = new HostPlayModeParameters();
        
        initParameters.QueryServices = new QueryStreamingAssetsFileServices();
        
        //主资源服务器地址
        initParameters.DefaultHostServer = netPath;
        //备用资源服务器地址
        initParameters.FallbackHostServer = netPath;
        
        yield return package.InitializeAsync(initParameters);
    }
    
 // 内置文件查询服务类,这个类只需要返回ApplicationstreamingAsset下面的文件存在性就好
    private class QueryStreamingAssetsFileServices : IQueryServices
    {
        public bool QueryStreamingAssets(string fileName)
        {
            // StreamingAssetsHelper.cs是太空战机里提供的一个查询脚本。
            string buildinFolderName = YooAssets.GetStreamingAssetBuildinFolderName();
            return File.Exists($"{Application.streamingAssetsPath}/{buildinFolderName}/{fileName}");
        }
    }

(2)更新资源版本


string packageVersion = "2023-4-20-1108";
 IEnumerator UpdatePackageVersion(ResourcePackage package)
 {
        //2.获取资源版本
        var operation = package.UpdatePackageVersionAsync();
        yield return operation;
        if(operation.Status!=EOperationStatus.Succeed)
        {
            Debug.LogError("版本号更新失败,可能是找不到服务器");
            yield break;
        }
        //这是获取到的版本号,在下一个步骤要用
        packageVersion = operation.PackageVersion;
}

(3) 更新补丁清单

 IEnumerator UpdateMainfest(ResourcePackage package)
    {
        //3.获取补丁清单
        var op=  package.UpdatePackageManifestAsync(packageVersion);
        yield return op;
        if(op.Status!=EOperationStatus.Succeed)
        {
            Debug.LogError("Mainfest更新失败!");
        }
    }

(4)下载补丁包


int downloadingMaxNum = 10;
int failedTryAgain = 3;
int timeout = 60;
        
 IEnumerator Download()
    {
        var package = YooAssets.GetPackage("DefaultPackage");
        var downloader = package.CreateResourceDownloader(downloadingMaxNum, failedTryAgain, timeout);
        //下载数量是0,直接就完成了
        if(downloader.TotalDownloadCount==0)
        {
            yield break;
        }

		//注册一些回调
        downloader.OnDownloadErrorCallback += OnError;
        downloader.OnDownloadProgressCallback += OnProcess;
        downloader.OnDownloadOverCallback += OnOver;
        downloader.OnStartDownloadFileCallback += OnStartDownOne;

		//开始下载
        downloader.BeginDownload();
        //等待下载完成
        yield return downloader;
		//检查状态
        if(downloader.Status==EOperationStatus.Succeed)
        {
            Debug.Log("下载完成");
        }
        else
        {
            Debug.Log("下载失败");
        }
    }

当这些步骤执行完,初始化完毕。随心所欲的使用yooasset吧。

三、针对各个平台的方案

1.编辑器模拟

为了加载更快,我们可以专门的按照上面的编辑器模拟初始化方式进行运行,节约开发时间。

2.纯单机不联网

只需要在打AB的时候调最后一个选择,拷贝到streamingAsset/BuiltIn
然后按照上面给出的单机初始化方式进行即可。

3.单机弱连网

先按照联网模式的初始化步骤走,然后在获取版本号那一步,如果成功则继续按联网的走,否则直接按

private IEnumerator Start()
{
//先获取包
    var package = YooAssets.GetPackage("DefaultPackage");
    //更新版本号
    var operation = package.UpdatePackageVersionAsync(60);
    yield return operation;

    if (operation.Status == EOperationStatus.Succeed)
    {
        // 如果获取远端资源版本成功,说明当前网络连接通畅,可以走正常更新流程。继续从服务器按照联网模式更新
    }
    else
    {
        // 如果获取远端资源版本失败,说明当前网络无连接。
        // 在正常开始游戏之前,需要验证本地清单内容的完整性。
        //如果清单都没了,那就不用继续了,请联网进行清单的补全
        string packageVersion = package.GetPackageVersion();
        var operation = package.PreDownloadContentAsync(packageVersion);
        yield return operation;
        if (operation.Status != EOperationStatus.Succeed)
        {
             ShowMessageBox("请检查本地网络,有新的游戏内容需要更新!");
            yield break;
        }

		//注意这里没真的开始下载,只是用本地清单看看需要下载数量有几个
        int downloadingMaxNum = 10;
        int failedTryAgain = 3;
        int timeout = 60;
        var downloader = operation.CreateResourceDownloader(downloadingMaxNum, failedTryAgain, timeout);
        if (downloader.TotalDownloadCount > 0)   
        {
            // 资源内容本地并不完整,需要提示玩家联网更新。
            ShowMessageBox("请检查本地网络,有新的游戏内容需要更新!");
            yield break;
        }
       
        // 开始游戏
        StartGame();
    }
}

4.联网

按照联网模式走就行,有一步失败就不能让玩家进去文章来源地址https://www.toymoban.com/news/detail-493865.html

到了这里,关于一篇文章学会YooAsset资源热更新的初始化的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 轻松学会Java导出word,一篇文章就够了!

    很多小伙伴在工作中,可能又这样一个需求:根据word模板去填充数据,变成我们想要的word文档,这是很多刚进入职场的小白都会碰到的需求。 当遇上这种需求,我们可以通过这篇文章要讲的 poi-tl 来做处理。 我们先在指定的位置创建一个测试文档。我这边直接在springboot中的

    2024年02月07日
    浏览(34)
  • Hive详解(一篇文章让你彻底学会Hive)

    概述 Hive是由Facebook(脸书)开发的后来贡献给了Apache的一套数据仓库管理工具,针对海量的结构化数据提供了读、写和管理的功能。 图-1 Hive图标 Hive本身是基于Hadoop,提供了类SQL(Hive Query Language,简称为HQL)语言来操作HDFS上的数据,而底层实际上是将用户书写的SQL转化为了MapR

    2024年04月12日
    浏览(35)
  • 一篇文章带你学会Hadoop-3.3.4集群部署

    目录 ​编辑 一、Hadoop集群部署 二、基础设施配置 2.1 设置网络  2.1.1 设置主机名称 2.1.2 设置hosts配置文件 2.1.3 关闭防火墙  2.1.4 关闭selinux  2.1.5 更换语言环境  2.1.6 更换时区  2.1.7 ssh免密 2.1.7.1 生成.ssh文件夹 2.1.7.2 进入文件夹 2.1.7.3 生成密码和私钥 2.1.7.4 免密授权 三、软

    2024年02月07日
    浏览(26)
  • 干货丨“看过这篇文章的人都学会Spark了”

    Spark是一个用于大规模数据处理的 统一 计算引擎。 Spark是一种 快速、通用、可扩展 的大数据分析引擎。 注意:Spark不仅仅可以做类似于MapReduce的 离线 数据计算,还可以做 实时 数据计算,并且它还可以实现类似于Hive的SQL计算,等等,所以说它是一个 统一 的计算引擎。

    2024年03月15日
    浏览(27)
  • 【数据结构】一篇文章带你彻底学会《后缀表达式》

    创作不易,本篇文章如果帮助到了你,还请点赞 关注支持一下♡𖥦)!! 主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步! 🔥c语言系列专栏:c语言之路重点知识整合 🔥 给大家跳段街舞感谢支持!ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ 后缀表

    2024年02月05日
    浏览(41)
  • 一篇文章学会如何在 NestJS 中开启微服务,微服务实战分享

    在软件开发的世界里,微服务架构是一个经常被提及的概念。但它到底是什么意思呢?为什么现在这么多团队和公司选择使用微服务?而NestJS又是如何帮助开发者构建微服务的? 想象一下,你想建一座大厦。你可以选择由一间强大的公司全权负责,从地基到尖塔的每一部分;

    2024年02月21日
    浏览(27)
  • 10min 学会Python 文件操作,我只看了这一篇文章

    平时,生活中我们见到的电影(MP4)、歌曲(MP3)、图片(JPG)、文本(txt)、表格(xlsx)…都可以被称为 文件。 这些文件的格式和文件里面的内容可能不同,但是他们有一个 共同特点: 数据都是保存在硬盘上的!!! 冯诺依曼体系: CPU(运算器和控制器)、存储器、输

    2023年04月08日
    浏览(36)
  • 看完这篇文章,保你学会C语言switch case 语句

    我的个人主页: ☆光之梦☆的博客_CSDN博客-C语言基础语法(超详细)领域博主 欢迎各位 👍点赞 ⭐收藏 📝评论 特别标注 :本博主将会长期更新c语言的语法知识,初学c语言的朋友们,可以收藏订阅一下我的专栏: C语言基础语法(超详细)_☆光之梦☆的博客-CSDN博客 (这

    2023年04月26日
    浏览(30)
  • 【C++】类和对象(中)一篇文章带你学会六大默认成员函数

    如果一个类中什么成员都没有,简称为空类。 空类中真的什么都没有吗?并不是,任何类在什么都不写时,编译器会自动生成以下6个默认成员函数。 默认成员函数:用户没有显式实现,编译器会生成的成员函数称为默认成员函数。 对于下面的date类: 对于Date类,可以通过

    2024年03月12日
    浏览(36)
  • 《C语言初阶篇》循环语句还没搞懂?这篇文章带你轻松学会循环语句!

    🎬 鸽芷咕 :个人主页  🔥 个人专栏 :《C语言初阶篇》 《C语言进阶篇》 ⛺️生活的理想,就是为了理想的生活!    🌈 hello! 各位宝子们大家好啊,又是新的一天开始了,今天给大家带来的循环语句的全面讲解!    ⛳️ 历时一天终于给肝出来了,本文详细讲解了wh

    2024年02月15日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包