Unity开发(七)多渠道、多平台、多服务器的版本管理和资源热更

前言

前面6篇博客,已经把Unity资源加载的最核心的功能搭建完成了,包括下载,ab加载(ab打包),asset加载,prefab实例化。

这篇文章主要阐述网络游戏开发中必不可少的版本管理。为什么需要版本和热更,这个已经是一个游戏开发者的一个共识,就不需要笔者再做过多解释了吧。

分支管理

一般游戏在开发中,会遇到多渠道、多平台、多服务器以及多语言的管理难题,而不当的处理会导致更高的理解和管理成本,所以我们需要明确拆分。

功能拆分

多渠道,一般是上线前夕需要部署到正式服上的模块,例如以下

  1. huiwei
  2. xiaomi
  3. oppo
  4. 。。。

多平台,一般是3个平台,如下

  1. iOS
  2. Android
  3. PC

多服务器,一般游戏依据需要,通用的如下

  1. 内网测试服(包括私人测试服)
  2. 外网测试服(用于接入外部渠道等需要的网络)
  3. 商务服(用于外部推广使用)
  4. 审核服(用于版号,ios等审核)
  5. 准正式服(跟正式服基本一致,一般比正式服提前一个版本)
  6. 正式服(对玩家开放的服务器)
  7. 特殊服

多语言,这个会根据需求,一般只是字符串读取配置不一样和个别图片替换,跟上面的功能目录拆分不同,属于游戏内功能。

多地区,如果全球发行的游戏,一般还要兼顾地区的多渠道(一般一个海外地区就一个渠道),笔者将其作为一个渠道处理

CDN目录结构

对应上面的逻辑,我们CDN目录结构设计如下

--InTest
  --Default			
    --IOS
    --Android
    --PC
  --Test
--OutTest
  --Default
  --Test
--Ready
--Release
  --Default
  	--IOS		一般只有一个IOS平台
  	--PC		
  --huawei		一般渠道都只有Android
    --Android	
  --xiaomi
    --Android
  --Japanese	一般多地区,是跟渠道并行一个层级
  	--IOS
  	--Android
  	--PC  

上述只是资源管理部分,有很多情况下,服务器很可能是同一台服务器,比如常见的iOS和Android数据互通,这样是根据游戏启动,游戏包体对应配置到服务端获取对应服务器地址,再连接对应服务器。

Git管理

应对上述的复杂条件,Git管理目前已经成为一个主流。
git分支管理内容非常多,不过不是本文的重点,后面有时间再开文再具体讲,只讲几个关键点。

  1. 项目中最好只有一条主开发分支线,多渠道,多语言,多平台的功能都在上面,关键节点拉出分支固定节点内容
  2. 要发布一个渠道,从开发主分支拉出分支作为xx渠道分支,导出package
  3. 热更xx渠道,从xx渠道分支拉出x.x.1版本,提交内容打patch,再从x.x.1 拉出x.x.2提交内容打patch
  4. xx渠道换包,重复第二步

版本管理

版本管理,管理的是版本号版本文件
版本号是一个通识的,可被玩家查看的标识,也就是最通俗的1.1.1,1.1.2,1.2.1这样的版本号。
而版本文件,一般是玩家不可见的,代表游戏资源文件。一般每个资源文件都有一个版本号,表示该版本文件需要使用哪个版本。

版本号

版本号一般有三个段组成,
maxVer表示第几代游戏,表示完全跨度的版本,比如龙之谷,龙之谷2,龙之谷3这样的差异
midVer表示换包版本号,表示包体更新,也就是需要更包,换包才需要提升一位
minVer表示资源版本号,表示可以直接可以通过下载热更的,也就是在游戏开始自己提示下载资源的

版本文件单元

public class FileVersionData
{
   
    public string name;
    public int size;
    public string md5;
    public int version;
    public override string ToString()
    {
   
        return name + "\t" + size + "\t" + md5 + "\t" + version;
    }
    public void InitData(string str)
    {
   
        var sps = str.Split('\t');

        name = sps[0];
        size = int.Parse(sps[1]);
        md5 = sps[2];
        version = int.Parse(sps[3]);
    }
}

每个文件都会记录名字,长度,MD5校验值和版本号。

版本文件表

而所有文件的版本信息会保存到一个版本文件表中

public void InitVersionFile(string path)
{
   
    _fileList.Clear();
    if (!File.Exists(path)) return;

    var lines = File.ReadAllLines(path);
    foreach(var line in lines)
    {
   
        if (string.IsNullOrEmpty(line)) continue;

        var fileVersionData = new FileVersionData();
        fileVersionData.InitData(line);

        _fileList.Add(fileVersionData.name, fileVersionData);
    }
}

版本文件表一般用于热更资源下载和资源文件加载的路径。

CDN文件目录

依据上面的规则,会得到如下的目录结构

--PC         		平台
--IOS
--Android
  --1001000			当前版本的资源目录,包含所有资源
    --Assets		ab导出的目录
      --Prefab
      	--xxx1.ab	ab文件
      	--xxx2.ab
      --Texture
        --xxx1.ab
        --xxx2.ab
      --Assets		ab的manifast文件
    --Bytes			二进制配置文件目录
      --xxx1.bytes	二进制文件(加密)
  --1001001			只导出比1001001增加和修改的文件
    --Assets
      --Prefab
      	--xxx1.ab	修改的保留
      	...xxx2.ab	相同的不放人目录
      	--xxx3.ab	增加的保留
      --Assets
  --1001002
  --1001003
  --1002000			换包需要新启midVer,会全部重新导出一遍资源
  --1002001
  --1001000.txt		版本文件表,包含所有文件信息
  --1001001.txt
  --1001002.txt
  --1002000.txt
  --1002001.txt
  --version.txt		当前版本号

上面的表示就一目了然了

资源热更

资源热更,一直是游戏开发的难点和痛点,不稳定和不高效一直是玩家流失的一大因素。

热更流程

清理
UpdateLoad
比对小版本小
提取热更文件
玩家同意
全部下载完成
成功
比对中版本小
比对版本一致
  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值