YooAssets官方流程分析HostPlayMode(联网)模式下资源更新流程。
资源更新流程:
_machine = new StateMachine(this);
_machine.AddNode<FsmPatchInit>();
_machine.AddNode<FsmUpdateVersion>();
_machine.AddNode<FsmUpdateManifest>();
_machine.AddNode<FsmCreateDownloader>();
_machine.AddNode<FsmDownloadFiles>();
_machine.AddNode<FsmDownloadOver>();
_machine.AddNode<FsmClearCache>();
_machine.AddNode<FsmPatchDone>();
_machine.Run<FsmPatchInit>();
1.初始化[FsmPatchInit]
初始化所做的事情:
创建HostPlayModeImpl对象[实现接口IBundleServices],并执行HostPlayModeInitializationOperation初始化流程。
HostPlayModeInitializationOperation所干的事情:
a.从沙盒路径加载Manifest。
b.假如加载成功,则根据Manifest验证沙盒路径bundle的完整性。
c.假如加载Manifest失败,则先读取App内置资源的版本号[默认PatchManifest_DefaultPackage.version文件],然后根据版本号加载内置资源的Manifest,并拷贝到沙盒路径,再根据Manifest验证沙盒路径bundle的完整性。
注:校验成功的bundle,会缓存到CacheSystem中。缓存过的bundle,不会再次校验
2.版本号更新[FsmUpdateVersion]
版本号更新很简单,即使用HostPlayModeUpdatePackageVersionOperation对象从远端下载资源版本文件[PatchManifest_DefaultPackage.version],并保存 到PatchManager.Instance.PackageVersion。
3.Manifest更新[FsmUpdateManifest]
Manifest更新使用HostPlayModeUpdatePackageManifestOperation,步骤如下:
a.计算沙盒路径Manifest的md5码。
b.如果计算成功,加载Web端Manifest的md5值,保存在PatchManifest_DefaultPackage_xxxx.hash文件中[打包时会生成此文件,表示远程版本]。xxxx表示版本号,即步骤2中更新到的版本号。
c.对比本地Manifest的md5值和服务器的Manifest的md5码值。
d.如果md5码相同,则重新加载沙盒路径Manifest[步骤1中已经加载过]。
e.如果md5码不相同,则从服务器下载载Manifest,并存储到沙盒路径。
f.Manifest已经加载或者更新完成,此时根据Manifest验证沙盒目录下bundle的完整性。校验成功的缓存CacheSystem。
4.创建资源下载器[FsmCreateDownloader],此步根据自身项目需求,创建下载全部资源的下载器或者只下载固定tag的下载器。在创建下载器时会计算下载列表。在计算过程中,会先检查CacheSystem,缓存的不下载。再检查InApp的随包资源,随包资源也不下载。
注:每次生成打包资源生成bundle时,bundle都是唯一的,有改变的bundle会根据规则生成一个新的名字。因此,如果随包资源有改变时,此时也会更新下载最新资源,因为Manifest已经改变。
5.下载资源[FsmDownloadFiles]。
6.下载完毕[FsmDownloadOver],没实际内容。
7.清除多余无用的bundle[FsmClearCache]。
8.更新下载流程完毕,启动游戏逻辑[FsmPatchDone]。
以上即为基本更新流程。
思考:在常见单机游戏中,更新Manifest后,后续玩家更新bundle过程中,如果玩家网络很差甚至断网,由于新的Manifest已经更新,而bundle又不全,玩家又没网,此时不能进入游戏。
此时需要bundle完整更新后,在写入服务器Manifest,或者需要恢复本地Manifest接口。当前框架暂不支持,已联系作者支持。
我正在使用i18n从头开始构建一个多语言网络应用程序,虽然我自己可以处理一大堆yml文件,但我说的语言(非常)有限,最终我想寻求外部帮助帮助。我想知道这里是否有人在使用UI插件/gem(与django上的django-rosetta不同)来处理多个翻译器,其中一些翻译器不愿意或无法处理存储库中的100多个文件,处理语言数据。谢谢&问候,安德拉斯(如果您已经在rubyonrails-talk上遇到了这个问题,我们深表歉意) 最佳答案 有一个rails3branchofthetolkgem在github上。您可以通过在Gemfi
当我尝试安装Ruby时遇到此错误。我试过查看this和this但无济于事➜~brewinstallrubyWarning:YouareusingOSX10.12.Wedonotprovidesupportforthispre-releaseversion.Youmayencounterbuildfailuresorotherbreakages.Pleasecreatepull-requestsinsteadoffilingissues.==>Installingdependenciesforruby:readline,libyaml,makedepend==>Installingrub
我安装了ruby版本管理器,并将RVM安装的ruby实现设置为默认值,这样'哪个ruby'显示'~/.rvm/ruby-1.8.6-p383/bin/ruby'但是当我在emacs中打开inf-ruby缓冲区时,它使用安装在/usr/bin中的ruby。有没有办法让emacs像shell一样尊重ruby的路径?谢谢! 最佳答案 我创建了一个emacs扩展来将rvm集成到emacs中。如果您有兴趣,可以在这里获取:http://github.com/senny/rvm.el
我真的为这个而疯狂。我一直在搜索答案并尝试我找到的所有内容,包括相关问题和stackoverflow上的答案,但仍然无法正常工作。我正在使用嵌套资源,但无法使表单正常工作。我总是遇到错误,例如没有路线匹配[PUT]"/galleries/1/photos"表格在这里:/galleries/1/photos/1/edit路线.rbresources:galleriesdoresources:photosendresources:galleriesresources:photos照片Controller.rbdefnew@gallery=Gallery.find(params[:galle
是否有简单的方法来更改默认ISO格式(yyyy-mm-dd)的ActiveAdmin日期过滤器显示格式? 最佳答案 您可以像这样为日期选择器提供额外的选项,而不是覆盖js:=f.input:my_date,as::datepicker,datepicker_options:{dateFormat:"mm/dd/yy"} 关于ruby-on-rails-事件管理员日期过滤器日期格式自定义,我们在StackOverflow上找到一个类似的问题: https://s
导读:随着叮咚买菜业务的发展,不同的业务场景对数据分析提出了不同的需求,他们希望引入一款实时OLAP数据库,构建一个灵活的多维实时查询和分析的平台,统一数据的接入和查询方案,解决各业务线对数据高效实时查询和精细化运营的需求。经过调研选型,最终引入ApacheDoris作为最终的OLAP分析引擎,Doris作为核心的OLAP引擎支持复杂地分析操作、提供多维的数据视图,在叮咚买菜数十个业务场景中广泛应用。作者|叮咚买菜资深数据工程师韩青叮咚买菜创立于2017年5月,是一家专注美好食物的创业公司。叮咚买菜专注吃的事业,为满足更多人“想吃什么”而努力,通过美好食材的供应、美好滋味的开发以及美食品牌的孵
?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------
本教程将在Unity3D中混合Optitrack与数据手套的数据流,在人体运动的基础上,添加双手手指部分的运动。双手手背的角度仍由Optitrack提供,数据手套提供双手手指的角度。 01 客户端软件分别安装MotiveBody与MotionVenus并校准人体与数据手套。MotiveBodyMotionVenus数据手套使用、校准流程参照:https://gitee.com/foheart_1/foheart-h1-data-summary.git02 数据转发打开MotiveBody软件的Streaming,开始向Unity3D广播数据;MotionVenus中设置->选项选择Unit
目录1.AdmobSDK下载地址2.将下载好的unityPackagesdk导入到unity里编辑 3.解析依赖到项目中
Unity自动旋转动画1.开门需要门把手先动,门再动2.关门需要门先动,门把手再动3.中途播放过程中不可以再次进行操作觉得太复杂?查看我的文章开关门简易进阶版效果:如果这个门可以直接打开的话,就不需要放置"门把手"如果门把手还有钥匙需要旋转,那就可以把钥匙放在门把手的"门把手",理论上是可以无限套娃的可调整参数有:角度,反向,轴向,速度运行时点击Test进行测试自己写的代码比较垃圾,命名与结构比较拉,高手轻点喷,新手有类似的需求可以拿去做参考上代码usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;u