GameFramework 框架 Resource 详解

总图

单机加载模式

可更新加载模式

1.加载与核对

2.更新

 

加载资源

可更新工作流程

1.资源列表的校验

    AB包和非AB包文件,在GF中被统一抽象为 Resource 文件,文件后缀为.dat ,在我们的资源列表中,记录的即是这些 .dat 资源文件的资源信息,信息中包含了这些资源文件的名称,hashcode,长度,zipHashcode,zip长度,是否AB包,加载设置,等等信息。

     在我们生成资源后,会得在 "生成目录/ Packed " (此目录下存储的是随APP一起发布的资源) 和  "生成目录/Full" (此目录下存储的是所有资源)下,出现两种不同的资源列表文件,分别是 GameFreamworkList.dat (Packed中) 和 GameFrameworkVersion.XXXX.dat (Full 中) ,游戏中总的资源信息会记录在 GameFrameworkVersion.XXXX.dat 文件中,此文件是作为客户端资源总表而存在的,游戏的资源文件和资源信息的处理和操作都已此表为准。而 GameFreamworkList.dat 文件是作为客户端目录的当前资源记录表存在,只是记录了当前所在的目录下的资源文件信息。客户端的存储目录有两个分别是 Application.streamingAssetsPath 路径指向的 只读目录 ,和 Application.persistentPath 路径指向的 读写目录。(一定要记住和分清这两个目录很重要),其中只读目录里面的文件就是我们工程中 streamingAssets 目录下的文件,streamingAssets 目录下的文件会跟谁 APP一起打包在客户端安装包中,最后在APP安装时恢复到只读目录下,所以在我们生成资源后,需要把 Packed 文件夹下的所有文件,拷贝到工程中的 streamingAssets 目录下,再发布APP(ResourceEditor面板中标记Resource 为Pakeaged 后这个 Resource 就会打包到 Packed中)。只读目录下的 GameFreamworkList.dat 只记录了本目录下的所有资源文件的信息,这些信息再以后的资源校验中会被使用。资源总表 GameFrameworkVersion.XXXX.dat 在可更新模式下是可以不随安装包一起发布,因为这个文件后面会被下载到读写目录中。

         应用每一次启动,首先需要你先得到当前资源总表的内部版本号(内部版本号在ResourceBuilder面板设置。至于内部版本号的动态获取过程,采用何种方式,则需要自己来实现),然后即可使用这个最新的内部版本号,调用

CheckVersionListResult ResourceComponent.CheckVersionList(int latestInternalResourceVersion) 

来判定当前的资源总表是不是最新的,此时 CheckVersionList 方法会访问读写目录,并尝试读取 GameFrameworkVersion.XXXX.dat 文件,如果文件没有或者内部携带的资源内部版本号与你传递进来的不同,则会返回资源需要更新的枚举值,否则则会返回不需要更新。

2.资源列表的更新

如果资源列表需要更新,则此时需要配置好你的更新地址,即公布在网络上用于下载Full 目录中文件的地址。

string ResourceComponent.UpdatePrefixUri

然后调用更新方法

void ResourceComponent.UpdateVersionList(int versionListLength, int versionListHashCode, int versionListZipLength, int versionListZipHashCode, UpdateVersionListCallbacks updateVersionListCallbacks)

前四个参数分别为

versionListLength 资源总表文件长度

versionListHashCode 资源总表文件校验和

versionListZipLength 资源总表文件压缩后的zip文件长度

versionListZipHashCode 资源总表文件压缩后的zip文件校验和

这些参数在 "生成目录/BuildReport/BuildLog.txt" 文件的信息中可以查看.

这些参数的动态获取也是需要你自己来编码实现,UpdateVersionList 会到你指定的地址下载 GameFrameworkVersion.XXXX.dat 文件  (XXXX 为资源总表文件校验和 ),如果文件下载成功则会回调 updateVersionListCallbacks 委托实例

3.资源校验

       前面我们已经经历了校验资源列表,和更新资源列表,这一步则是比较不同的资源列表然后判断哪些资源文件需要下载到本地,以及清理不需要的资源文件。

       首先资源列表文件事实上一共有三份,除了总表 GameFrameworkVersion.XXXX.dat 和 只读目录下的 GameFreamworkList.dat 之外, 读写目录下也有一份 GameFreamworkList.dat  资源列表文件,这份文件记录的是最后一次更新完毕后读写目录中的资源文件信息(如果你的应用程序是第一次启动,且没有更新过资源,那么这一份文件也是不存在的,但是如果你成功的更新过资源,则由GF框架自动为你生成 )

         现在先设置一下资源模块当前的变体,因为校验资源这一步即校验资源文件是否要更新,同时也会建立资源信息数据库用于之后的加载操作,所以在你校验资源信息之前务必设置好当前要使用的资源变体,之后如果调用加载资源方法会在此时建立的资源信息数据库中寻找资源信息。除当前变体之外的其他变体的资源信息将不会在资源数据库中,如果加载的是其他变体的资源文件,则被作为无此资源信息的情况处理。这里调用

void ResourceComponent.SetCurrentVariant(string currentVariant)

则可以设置变体,默认情况下为“”,也就是无变体。接着就可以正式调用

void ResourceComponent.CheckResources(CheckResourcesCompleteCallback checkResourcesCompleteCallback)

开始校验资源,CheckResources 会以分别读取三个资源列表文件进行比较,如果只读目录或者读写目录下的 GameFreamworkList.dat  文件不存在,则以该目录下没有资源文件处理。读取完三个资源列表文件内容后,将会以总表中的资源信息为准,通过总表中记录的资源信息的文件hashcode值作为唯一标识。如果某个资源信息在 两个GameFreamworkList.dat  资源表都没有记录,则将这个资源信息对应的资源文件作为需要更新的资源文件处理,记录在等待更新列表中。除此之外,如果发现总表中记录的资源信息,在只读目录和读写目录下的 GameFreamworkList.dat  资源表中都存在,则会删除在读写目录中的对应资源文件已节省空间(因为只读目录中已经有了一份资源文件,不需要存储两份)。在建立完更新列表和资源信息数据库之后,接下来就可以进行资源文件更新了。

4.资源更新

资源更新模块会自动根据我们上一步校验资源时建立的资源文件更新列表,前往之前设置的下载地址,依次的下载资源文件到读写目录中,并在下载完毕后,自动生成读写目录中的 GameFreamworkList.dat 资源表文件,这个文件记录了读写目录至本次更新结束完毕后,读写目录下的资源文件信息。方便下一次的更新操作。调用

void UpdateResources(UpdateResourcesCompleteCallback updateResourcesCompleteCallback)

即可开启更新流程,这个流程很简单就是下载文件,然后生成读写目录下的资源列表文件,至此可更新模式的执行流程也全部介绍完毕了。(当然你也可以只更新某个具体的资源组中的资源文件,这里就不做介绍了建议等GF基本功能了解的比较熟悉了再使用较为高级的功能)

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值