游戏热更分二种:资源更新,代码更新。资源更新 将unity资源 打包成assetsBundle 上传服务器,代码更新 一般常用Lua 写客户端逻辑,Lua 打成assetsBunlde。
下面介绍一下资源更新:
游戏启动 第一时间会验证 版本信息 判断需要 做大版本更新 还是小版本更新
private void GameUpdate()
{
GameUpdateView.Init();
if (UseMandatoryUpdateMode)
{
//IOS强更流程,如果发现本地version比网络上的version小,则弹框,return,跳转AppStore
#if UNITY_IPHONE && !UNITY_EDITOR
if (IOSMandatoryUpdate.WhetherMandatoryUpdate())
{
GameUpdateView.ChangeState(IOSMandatoryUpdate.NeedIOSMandatoryUpdate_STATE);
return;
}
#endif
}
if (UseUpdateMode)
{
//GameUpdateView.Init();
AssetsUpdater.Init(updateStateChangeHandler);
}
else
{
//for test c# game quality update callback
//RegisterGameQualityUpdate(TestRegisterGameQualityUpdate) ;
preLoadAsset(InitLua);
}
}
通过本地的 iOS对应的版本文件 读取 当前的版本,服务器资源地址,appstrore 地址,版本地址,并获取服务端版本文件中版本号
public bool HandleWhetherMandatoryUpdate()
{
try
{
Dictionary<string, string> localVersionMap = LitJson.JsonMapper.ToObject<Dictionary<string, string>>((Resources.Load("Config/MandatoryVersion") as TextAsset).text);
string localversion =localVersionMap["version"];
if (int.TryParse(localversion, out _currentVerNum))
{
}
else
{
_currentVerNum = 0;
}
onlineUpdateInfoUrl = localVersionMap["netVersionUrl"];
_appStoreUrl = localVersionMap["openUrl"];
string onlineInfo = GetOnlineUpdateInfo(onlineUpdateInfoUrl);
HandleOnlineUpdateInfo(onlineInfo);
if (_currentVerNum < _onlineVerNum)
{
return true;
}
return false;
}
catch
{
return false;
}
}
如果大版本号相同,就不需要更新大版本。无需跳转appstore
注:下篇介绍小版本更新