启动流程,访问账号服务器,获取渠道号,版本号,资源地址
然后进入检查更新的流程
/// <summary>
/// 启动流程
/// </summary>
public class ProcedureLaunch : ProcedureBase
{
public override void OnEnter()
{
base.OnEnter();
//访问账号服务器
string url = GameEntry.Http.RealWebAccountUrl + "/api/init";
Dictionary<string, object> dic = GameEntry.Pool.DequeueClassObject<Dictionary<string, object>>();
dic.Clear();
//渠道号
GameEntry.Data.SysDataManager.CurrChannelConfig.ChannelId = 0;
//版本号
GameEntry.Data.SysDataManager.CurrChannelConfig.InnerVersion = 1001;
dic["ChannelId"] = GameEntry.Data.SysDataManager.CurrChannelConfig.ChannelId;
dic["InnerVersion"] = GameEntry.Data.SysDataManager.CurrChannelConfig.InnerVersion;
//HTTP请求服务,拿到版本信息,资源地址
GameEntry.Http.Post(url, OnWebAccountInit, dic);
}
private void OnWebAccountInit(HttpCallBackArgs args)
{
if (!args.HasError)
{
JsonData data = JsonMapper.ToObject(args.Value);
JsonData config = JsonMapper.ToObject(data["Value"].ToString());
GameEntry.Data.SysDataManager.CurrChannelConfig.ServerTime = long.Parse(config["ServerTime"].ToString());
GameEntry.Data.SysDataManager.CurrChannelConfig.SourceVersion = config["SourceVersion"].ToString();
GameEntry.Data.SysDataManager.CurrChannelConfig.SourceUrl = config["SourceUrl"].ToString();
GameEntry.Data.SysDataManager.CurrChannelConfig.RechargeUrl = config["RechargeUrl"].ToString();
GameEntry.Data.SysDataManager.CurrChannelConfig.TDAppId = config["TDAppId"].ToString();
GameEntry.Data.SysDataManager.CurrChannelConfig.IsOpenTD = int.Parse(config["IsOpenTD"].ToString()) == 1;
Debug.Log("RealSourceUrl " + GameEntry.Data.SysDataManager.CurrChannelConfig.RealSourceUrl);
//切换到检查版本更新的流程
GameEntry.Procedure.ChangeState(ProcedureState.CheckVersion);
}
}
}
检查版本更新的流程,如果是budle模式下,初始化只读取资源包信息,
非Bundl模式下,进入预加载流程
/// <summary>
/// 检查更新流程
/// </summary>
public class ProcedureCheckVersion : ProcedureBase
{
public override void OnEnter()
{
base.OnEnter();
#if ASSETBUNDLE
GameEntry.Resource.InitStreamingAssetsBundleInfo();
#else
//切换到预加载
GameEntry.Procedure.ChangeState(ProcedureState.Preload);
#endif
}
public override void OnUpdate()
{
base.OnUpdate();
}
public override void OnLeave()
{
base.OnLeave();
}
}
进入预加载之后,开启资源包模式会初始化只读区资源包信息
非资源包模式会异步加载表格
异步加载表格,Bundle模式下会去加载bundle
非bundle模式下,会直接加载表格
非资源包模式直接获取buffer数组
资源包模式,去load资源
上面是表格相关的
启动游戏会启动lua
非Bundle模式,直接设置路径,require Main就可以
Bundle模式下,去加载资源loader,加载bundle.
预加载流程
禁用Assetbundle不需要加载shader,
bundle模式下去加载shader
进度100之后会进入登录场景
非Assetbundle模式下的资源加载改动,不需要查找依赖, 一个克隆出来之后本身就带有依赖,直接取池返回对象
加载资源都用资源加载器进行加载,
释放的时候直接把ResourceEntity回池即可,释放的是实例
不是资源包模式下,池不用回收,但是不用的资源还是要释放的
释放不用的资源
下面是加载场景的
用的场景加载器,SceneLoadRoutine
宏定义的修改,资源包模式下选中所有场景,非资源包模式下,只选中登录场景
这块的设置