天天看點

Unity3D_GameFramework架構_StartForce項目學習_進入流程

   遊戲第一步是資料的初始化,這一步使用的架構的流程

一、GameFramework架構的流程

  流程是貫穿遊戲運作時整個生命周期的有限狀态機。通過流程,将不同的遊戲狀态進行解耦将是一個非常好的習慣。對于網絡遊戲,你可能需要如檢查資源流程、更新資源流程、檢查伺服器清單流程、選擇伺服器流程、登入伺服器流程、建立角色流程等流程,而對于單機遊戲,你可能需要在遊戲選擇菜單流程和遊戲實際玩法流程之間做切換。如果想增加流程,隻要派生自 ProcedureBase 類并實作自己的流程類即可使用。

    繼承于ProcedureBase 可以使用生命周期函數,類似于Unity3D的生命周期函數。OnInit初始化、OnEnter每次進入流程、OnUpdate每次幀更新、OnLeave每次離開這個流程時執行、OnDestroy遊戲退出時執行。

二、流程的使用

  架構的流程元件為Procedure。具體邏輯看不到,但在面闆上可以看到,裡面存在多個流程類,還有一個Entrance Procedure的下拉清單,這個是標明第一個執行的流程,即運作遊戲後的第一個流程。這裡選的是ProcedureLaunch。

Unity3D_GameFramework架構_StartForce項目學習_進入流程
Unity3D_GameFramework架構_StartForce項目學習_進入流程

    ProcedureLaunch類裡面主要進行了資料初始化,OnEnter裡寫的部分資料初始化邏輯,在OnUpdate使用ChangeState函數切換到下一個狀态節點ProcedureSplash,在ProcedureSplash狀态内會檢查目前版本狀态,以傳回的bool值來跳轉流程。

Unity3D_GameFramework架構_StartForce項目學習_進入流程

    傳回true時,進入ProcedurePreload流程,這個流程在Procedure元件内已有定義。預加載流程,OnEnter内對配置表、資料表、字典加載事件進行了監聽并設定了回調函數,這幾個事件是GameFramework架構内置事件,然後加載了配置表、資料表、字典,在執行完OnEnter的預加載後進入OnUpate,在這裡使用枚舉器檢查了m_LoadedFlag的字典内是否為空,當不為空時,設定了狀态機資料VarInt(架構内置資料内型,封裝的int),這個資料将在下一個流程内使用,分别為下個場景ID和場景配置資料"Scene.Menu",使用ChangeState進入ProcedureChangeScene流程。注意:在離開ProcedurePreload流程時會在OnLeave對之前在OnEnter注冊的事件進行釋放。

Unity3D_GameFramework架構_StartForce項目學習_進入流程

    傳回false時,進入ProcedureCheckVersion,這個流程在Procedure元件内已有定義,版本檢查流程,OnEnter内對網絡請求成功、網絡請求失敗、資源加載完成事件進行了監聽并設定了回調函數,在執行RequestVersion時,會擷取目前裝置資訊以及平台資訊,使用WWW打包資料後,進行發送,發送的位址在BuiltinDataComponent類内m_BuildInfoTextAsset外部連接配接資料裡,這個Json表是直接在遊戲對象BuiltinData上直接引用了對象。在接收到網絡回複後,則會調用網絡請求成功的回調函數OnWebRequestSuccess,這裡對接收的資料進行了核實,并開啟了第一個UI(DialogForm),以及遊戲資源的加載。資源加載成功會回調OnResourceInitComplete。如果是網絡請求失敗則回調OnWebRequestFailure。當資源加載完畢後,OnUpdate會判斷一下資源是否加載成功,如果成功則會使用ChangeState進入ProcedurePreload流程(同上)。注意:在離開ProcedurePreload流程時會在OnLeave對之前在OnEnter注冊的事件進行釋放。

Unity3D_GameFramework架構_StartForce項目學習_進入流程

繼續閱讀