热更 浅谈(一)

游戏热更分二种:资源更新,代码更新。资源更新 将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

注:下篇介绍小版本更新

原文地址:https://www.cnblogs.com/DOGame/p/8686649.html