項目核心思路
該項目實現了一個完整的游戲賬號流程:
??用戶側流程??:新用戶注冊 -> 返回登錄 -> 輸入賬號密碼 -> 選擇游戲服務器 -> 進入游戲。
??數據管理??:所有數據(賬號信息、服務器列表、用戶選擇)都通過 XML 進行本地持久化存儲和讀取,實現了“記住密碼”、“自動登錄”等功能。
??UI 管理??:采用單例模式和基類繼承的方式管理各個 UI 面板,使得面板的顯示、隱藏和邏輯調用清晰且高效。
流程圖
流程分析
1. 數據模型層 (Model)
?LoginData
(登錄數據)??
作用??:存儲與用戶登錄相關的數據
??重要字段??:
userName
,?password
: 賬號密碼。frontServerID
: 記錄用戶上次登錄的服務器ID,是實現“上次登錄”功能的關鍵。rememberPW
,?autoLogin
: 布爾值,控制是否記住密碼和自動登錄。
RegisterData
(注冊數據)??
??作用??:存儲所有已注冊的賬戶信息。
??重要字段??:
registerInfo
: 一個序列化字典,鍵值對為?<用戶名, 密碼>
。這是驗證登錄信息的基礎數據庫。
ServerInfo
&?Server
(服務器信息)??
??作用??:定義服務器列表和單個服務器的數據結構。
??重要字段?? (
Server
類):id
: 服務器唯一標識。name
: 服務器名稱(如“王者之巔”)。state
: 服務器狀態(0:正常,1:流暢,2:火爆,3:維護等),用于在UI上顯示不同圖標。isNew
: 是否為新區,用于顯示“新”標識。
2. 數據管理層 (Manager)
這個類是整個系統的核心大腦,負責處理所有業務邏輯和數據存取。
LoginMgr
(登錄管理器)??
??作用??:??單例類??,統籌管理登錄、注冊、服務器數據的所有操作。
??核心功能??:
??初始化??:在構造函數中從XML加載所有數據(
LoginData
,?RegisterData
,?ServerInfo
)。??數據存取??:提供?
SaveLoginData()
和?SaveRegisterData()
方法,將內存中的數據保存回XML文件。??注冊驗證??:
RegisterUser()
方法檢查用戶名是否已存在,不存在則添加到注冊數據中。??登錄驗證??:
CheckInfo()
方法比對輸入的用戶名密碼是否與注冊數據匹配。??數據提供??:通過屬性(如?
LoginData
)向UI層提供數據。
3. UI 基礎層
BasePanel<T>
(UI面板基類)?
提供了一個所有UI面板的基類,簡化了面板管理?
??作用??:??泛型單例基類??。所有其他UI面板都繼承自它。
??核心功能??:
Instance
: 提供全局唯一的訪問點。ShowMe()
,?HideMe()
: 默認實現顯示和隱藏GameObject。Init()
: 抽象方法,強制子類實現初始化邏輯(如按鈕事件綁定)。
4. UI 表現層 (View)
這些是具體的UI界面,繼承自?BasePanel<T>
,負責界面展示和用戶交互
LoginPanel
(登錄面板)??
??作用??:用戶輸入賬號密碼的界面。
??核心功能??:
輸入框和按鈕的事件綁定。
初始化時,根據保存的?
LoginData
自動填充賬號密碼。點擊登錄按鈕時,調用?
LoginMgr.Instance.CheckInfo()
進行驗證。根據?
autoLogin
標志,自動嘗試登錄。驗證成功后,根據?
frontServerID
決定是直接進入游戲(ServerPanel
)還是需要選擇服務器(ChooseServerPanel
)。
RegisterPanel
(注冊面板)??
??作用??:新用戶注冊賬號的界面。
??核心功能??:
輸入用戶名和密碼(要求大于6位)。
調用?
LoginMgr.Instance.RegisterUser()
完成注冊。注冊成功后,自動填充登錄面板并清空上次的服務器記錄(
ClearLoginData
)。
ChooseServerPanel
(選擇服務器面板)??
??作用??:讓用戶從所有服務器中選擇一個的界面。通常分為左側服務器組列表和右側具體服務器列表。
??核心功能??:
Init()
: 根據服務器總數,動態生成左側的服務器組按鈕(如“1-5區”、“6-10區”)。UpdatePanel()
: 當點擊左側組按鈕時,動態生成該組內的所有服務器按鈕到右側。ShowMe()
: 顯示時,更新頂部顯示的“最近登錄的服務器”信息。
ServerPanel
(服務器面板)??
??作用??:顯示當前選定的服務器,并提供“進入游戲”的最終入口。
??核心功能??:
顯示已選服務器的名稱。
“進入游戲”按鈕調用?
SceneManager.LoadScene("GameScene")
,正式進入游戲場景。提供“切換服務器”按鈕返回到?
ChooseServerPanel
。
TipPanel
(提示面板)??
??作用??:一個通用的彈窗,用于顯示操作結果(如“密碼錯誤”、“注冊成功”等)。
??核心功能??:
ChangeInfo()
: 動態改變提示信息。通常只有一個“確定”按鈕用于關閉自己。
5. UI 組件層
這些是動態生成的UI列表項,用于構建更復雜的UI界面。
ServerItem
(服務器組項)??
??作用??:代表?
ChooseServerPanel
左側列表中的一個組(如“1-5區”按鈕)。??功能??:點擊后,通知?
ChooseServerPanel
更新右側列表。
ServerChooseItem
(服務器選擇項)??
??作用??:代表?
ChooseServerPanel
右側列表中的一個具體服務器按鈕。??功能??:
根據?
Server
數據初始化顯示(服務器名、狀態圖標、是否新區)。點擊后,將它的服務器ID保存到?
LoginData.frontServerID
,并打開?ServerPanel
。