-
Notifications
You must be signed in to change notification settings - Fork 441
1.GameStart
游戏只有一个场景,其中有个节点叫 Main,就挂着一个自定义的 Main 组件:
详见:Assets/XLuaFramework/Scripts/Main.cs 文件。
Main 类里实现了个简单的状态机,因为启动流程状态间的跳转逻辑不复杂所以就写在一个 switch case 里了,见其 Main.Update 方法。基本上就是下面的 State 从上到下执行个一遍就搞定了:
需要重点考察的是 StartLogin 状态:
刚进入此登录状态时就开始初始化了 lua 环境,InitLuaEvn 方法里调用了:
LoadScript("BaseRequire");
Lua/BaseRequire.lua 文件 require 了一些通用的lua工具类。
StartLogin 方法调用时还传入了一个回调,登录成功后会执行该回调函数从而进入下个状态,在调用了:
其中 Lua/LuaMain.lua 中的 LuaMain 函数开始初始化游戏中各系统的 Controller 并调用其 Init 函数:
其中 Lua/Game/Login/LoginController.lua 的 Init 函数就显示 LoginView 即登录界面了:
登录界面:
按下登录后调用:
GlobalEventSystem:Fire(LoginConst.Event.StartLogin, login_info) 开始向该 ip 请求登录。
LoginController 监听了该事件,进入其 StartLogin 函数。和 skynet 服务器的登录校验流程有空另开一篇细讲。登录完成后将调用 c# 那边登录成功的回调方法,和触发 LoginConst.Event.LoginSucceed 事件。
c# 端进入启动流程的 State.StartGame 状态,给 Main 节点增加 MainWorld 组件并调用其 StartGame 方法,初始化玩法的 ECSSystem 们。
lua 端则开始请求该帐号有哪些角色,有则进入选角界面,无则进入创角界面。选中角色进入游戏时请求该角色信息,其中包含有该角色所在场景 id 等信息,然后调用 SceneMgr.Instance:LoadScene 加载场景,启动流程完成。