1. 加载场景后就会执行的事件LoadSceneSuccessEventArgs.EventId
由框架内部执行,每次加载完新的场景都会执行这个事件,作用:在加载场景是可以根据场景是否加载完成然后执行想要执行的内容,比如获取组件等
GameEntry.Event.Subscribe(LoadSceneSuccessEventArgs.EventId, OnLoadSceneSuccess);
2. ProcedureChageScene两种方式,一种是把这个当成中间过渡场景加载等等。
修改ProcedureChageScene 代码,和传入下一个状态参数。
由于感觉挺麻烦的就用下边的方法,反正代码也不多。直接重ProcedureChageScene复制过来就行了
第二种也可以自己写改变场景,不经过ProcedureChageScene;个人比较喜欢这样写。
这样使用:ProcedureLoad 跳转到指定状态后加载场景,比如跳转ProcedureXXXScene 状态 后清理场景并后再加载场景。
string[] loadedSceneAssetNames = GameEntry.Scene.GetLoadedSceneAssetNames();
for (int i = 0; i < loadedSceneAssetNames.Length; i++)
{
GameEntry.Scene.UnloadScene(loadedSceneAssetNames[i]);
}
//加载场景
m_NextSceneID = procedureOwner.GetData<VarInt>(Constant.ProcedureData.NextSceneId).Value; //得到场景的id
IDataTable<DRScene> dtScene = GameEntry.DataTable.GetDataTable<DRScene>();
DRScene drScene = dtScene.GetDataRow(m_NextSceneID);
if (drScene == null)
{
Log.Warning("Can not load scene '{0}' from data table.", m_NextSceneID.ToString());
return;
}
GameEntry.Scene.LoadScene(AssetUtility.GetSceneAsset(drScene.AssetName), Constant.AssetPriority.SceneAsset, this);