赞
踩
前面6篇博客,已经把Unity资源加载的最核心的功能搭建完成了,包括下载,ab加载(ab打包),asset加载,prefab实例化。
这篇文章主要阐述网络游戏开发中必不可少的版本管理。为什么需要版本和热更,这个已经是一个游戏开发者的一个共识,就不需要笔者再做过多解释了吧。
一般游戏在开发中,会遇到多渠道、多平台、多服务器以及多语言的管理难题,而不当的处理会导致更高的理解和管理成本,所以我们需要明确拆分。
多渠道,一般是上线前夕需要部署到正式服上的模块,例如以下
huiwei
xiaomi
oppo
。。。
多平台,一般是3个平台,如下
iOS
Android
PC
多服务器,一般游戏依据需要,通用的如下
内网测试服
(包括私人测试服)外网测试服
(用于接入外部渠道等需要的网络)商务服
(用于外部推广使用)审核服
(用于版号,ios等审核)准正式服
(跟正式服基本一致,一般比正式服提前一个版本)正式服
(对玩家开放的服务器)特殊服
多语言,这个会根据需求,一般只是字符串读取配置不一样和个别图片替换,跟上面的功能目录拆分不同,属于游戏内功能。
多地区,如果全球发行的游戏,一般还要兼顾地区的多渠道(一般一个海外地区就一个渠道),笔者将其作为一个渠道处理
对应上面的逻辑,我们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分支管理内容非常多,不过不是本文的重点,后面有时间再开文再具体讲,只讲几个关键点。
版本管理,管理的是版本号
和版本文件
。
版本号是一个通识的,可被玩家查看的标识,也就是最通俗的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); } }
版本文件表一般用于热更资源下载和资源文件加载的路径。
依据上面的规则,会得到如下的目录结构
--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 当前版本号
上面的表示就一目了然了
资源热更,一直是游戏开发的难点和痛点,不稳定和不高效一直是玩家流失的一大因素。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。