NGUI--游戲登錄、注冊和服務器選擇系統??

項目核心思路

該項目實現了一個完整的游戲賬號流程:

  1. ??用戶側流程??:新用戶注冊 -> 返回登錄 -> 輸入賬號密碼 -> 選擇游戲服務器 -> 進入游戲。

  2. ??數據管理??:所有數據(賬號信息、服務器列表、用戶選擇)都通過 XML 進行本地持久化存儲和讀取,實現了“記住密碼”、“自動登錄”等功能。

  3. ??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

項目源碼

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/923514.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/923514.shtml
英文地址,請注明出處:http://en.pswp.cn/news/923514.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

自動化測試框架是軟件測試的核心基礎設施,通過預設規則和腳本自動執行測試用例,顯著提高測試效率和覆蓋率。

1. 自動化測試框架1.1 概述自動化測試框架是軟件測試的核心基礎設施&#xff0c;通過預設規則和腳本自動執行測試用例&#xff0c;顯著提高測試效率和覆蓋率。現代AI驅動的自動化測試框架結合了機器學習、自然語言處理和計算機視覺技術&#xff0c;實現了更智能的測試用例生成、…

在 Ubuntu 系統中利用 conda 創建虛擬環境安裝 sglang 大模型引擎的完整步驟、版本查看方法、啟動指令及驗證方式

以下是在 Ubuntu 系統中利用 conda 創建虛擬環境安裝 sglang 大模型引擎的完整步驟、版本查看方法、啟動指令及驗證方式,全程使用清華源加速,并包含關鍵注意事項: 一、完整安裝步驟(基于 conda + 清華源) 1. 準備工作:安裝 conda 并配置清華源 (1)安裝 Miniconda #…

Unity Excel數據導入工具

UnityExcelImporterX - Unity Excel數據導入工具 自動將Excel文件&#xff08;.xls, .xlsx&#xff09;中的數據轉換為Unity的ScriptableObject資源。 項目基于unity-excel-importer&#xff0c;增加了一些新特性。項目地址&#xff1a;github.com/nayaku/UnityExcelImporter…

np.linalg 函數一覽

&#x1f4da; 常用 np.linalg 函數一覽下面是一些最常用的功能和示例&#xff1a;1. np.linalg.norm() —— 計算向量或矩陣的范數python深色版本import numpy as npv np.array([3, 4]) print(np.linalg.norm(v)) # L2 范數&#xff08;模長&#xff09;: √(34) 5.0A np.…

Linux入門(二)

計算機原理系列 歡迎大家關注「海拉魯知識大陸」 多交流不迷路 Linux入門&#xff08;二&#xff09; 在上一章Linux入門(一)中rm -rf /是比較簡單的哈&#xff0c;那么升級一下&#xff1a;xargs指令的作用是啥呢&#xff1f; 1.進程 應用的可執行文件是放在文件系統里&a…

開發與維護nodejs工具庫或自定義npm包

h5打開以查看 一、初始設置&#xff1a;為成功發布做好準備 1. 項目初始化與結構 bash # 創建項目目錄并初始化 mkdir my-awesome-lib cd my-awesome-lib npm init -y 推薦的項目結構&#xff1a; text my-awesome-lib/ ├── src/ # 源代碼目錄 │ └──…

IntelliJ IDEA 的 Git 功能

1. 克隆&#xff08;Clone&#xff09;項目 這是你開始的第一步。你需要將遠程倉庫的代碼克隆到本地。 打開 IDEA&#xff0c;選擇 Get from VCS。在彈出的窗口中&#xff0c;選擇 Git。粘貼遠程倉庫的 URL&#xff08;通常來自 GitHub、GitLab 等&#xff09;。選擇一個本地目…

fastapi全局注入mysql,單數據庫

1、封裝sql連接 test_db.py from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession from sqlalchemy.orm import sessionmaker from fastapi import Request, Depends# 1. 數據庫連接配置 async_engine create_async_engine("mysqlaiomysql://root:root…

深度學習常見應用算力要求?

深度學習常見應用的算力要求&#xff0c;首先需要明確算力的核心衡量維度&#xff1a;計算能力&#xff1a;以每秒浮點運算次數&#xff08;FLOPS&#xff0c;如 TF32/FP16/FP8 精度下的吞吐量&#xff09;衡量&#xff0c;決定任務運行速度&#xff1b;顯存容量&#xff1a;決…

邪修實戰系列(5)

1、第一階段邪修實戰總覽&#xff08;9.1-9.30&#xff09; 把第一階段&#xff08;基礎夯實期&#xff09;的學習計劃拆解成極具操作性的每日行動方案。這個計劃充分利用我“在職學習”的特殊優勢&#xff0c;強調“用輸出倒逼輸入”&#xff0c;確保每一分鐘的學習都直接服務…

Python TensorFlow的CNN-LSTM-GRU集成模型在邊緣物聯網數據IoT電動汽車充電站入侵檢測應用

全文鏈接&#xff1a;https://tecdat.cn/?p43881 原文出處&#xff1a;拓端抖音號拓端tecdat 隨著物聯網&#xff08;IoT&#xff09;技術在電動汽車充電站&#xff08;EVCS&#xff09;中的普及&#xff0c;充電站不僅成為智能交通的關鍵節點&#xff0c;更因連接電網、用戶設…

3dma渲染噪點成因排查及優化方案

有時候在用 3D Max 渲染完效果圖&#xff0c;畫面上總有密密麻麻的小顆粒&#xff0c;也就是常說的噪點&#xff0c;原本精致的模型和材質&#xff0c;一有噪點質感就掉了大半。其實多數時候&#xff0c;噪點問題都和渲染參數設置有關。那么出現噪點原因和解決方案有哪些&#…

【LeetCode】算法詳解#15 ---環形鏈表II

1.題目描述 給定一個鏈表的頭節點 head &#xff0c;返回鏈表開始入環的第一個節點。 如果鏈表無環&#xff0c;則返回 null。如果鏈表中有某個節點&#xff0c;可以通過連續跟蹤 next 指針再次到達&#xff0c;則鏈表中存在環。 為了表示給定鏈表中的環&#xff0c;評…

Kafka面試精講 Day 18:磁盤IO與網絡優化

【Kafka面試精講 Day 18】磁盤IO與網絡優化 在“Kafka面試精講”系列的第18天&#xff0c;我們聚焦于磁盤IO與網絡優化。作為支撐百萬級吞吐量的分布式消息系統&#xff0c;Kafka的高性能不僅依賴于優秀的架構設計&#xff0c;更離不開對底層資源——尤其是磁盤和網絡——的極…

ActiveMQ RocketMQ RabbitMQ Kafka選型及應用場景

許多時候我們都將Kafka拿來跟常用的幾個消息隊列作比較&#xff0c;將 Kafka 加入對比使得選型更加全面和實際。但請注意Kafka并非完全適用消息中間件的所有場景。這四款消息中間件定位不同&#xff0c;選擇取決于你的具體場景。消息隊列選型核心定位一句話總結RabbitMQ&#x…

STM32初始化串口重定向后printf調試信息不輸出的問題

STM32初始化串口重定向后調試信息不輸出的問題 Author&#xff1a;明月清了個風Date&#xff1a; 2025/9/9PS&#xff1a;開發stm32F745的過程中發現printf有時候不打印信息&#xff0c;單獨調試確定了串口初始化和重定向正確&#xff0c;但是在系統整體調試的時候雖然正確運行…

PCA9535ECDWR2G 微控制器MCU接口芯片 ON 電子元器件解析

一、PCA9535ECDWR2G ON 元器件解析1. 是什么電子元器件&#xff1f; PCA9535ECDWR2G 是安森美半導體&#xff08;ON Semiconductor&#xff09;生產的一款16位I/O擴展器。它屬于接口芯片類別&#xff0c;具體功能是通過IC總線為微控制器&#xff08;MCU&#xff09;提供額外的通…

大模型中token與tokenizer的區別

TokenToken 的基本概念在大模型&#xff08;如GPT系列&#xff09;中&#xff0c;token是文本處理的最小單位。模型將輸入的文本分割成token序列&#xff0c;每個token對應一個唯一的整數ID&#xff0c;用于模型的內部處理。例如&#xff0c;英文單詞"apple"可能被編…

還在覺得剪輯太難?用對視頻剪輯軟件,讓剪輯變得像拼圖一樣有趣

想制作出精彩的Vlog&#xff0c;擁有一款簡單易用的視頻編輯軟件是關鍵的第一步。如果你曾因為覺得剪輯太復雜、技術門檻太高而望而卻步&#xff0c;那么這篇文章就是為你準備的&#xff0c;因為借助今天簡單易用的視頻編輯軟件&#xff0c;人人都能成為自己生活的導演。本文就…

【ZEGO即構開發者日報】微信公眾號上線“智能回復”功能;2025年8月中國應用/游戲廠商出海收入Top30榜;土耳其宣布將封禁29款社交/社媒應用……

&#x1f4a1;開發者朋友們大家好&#xff0c;這里是 開發者日報&#xff01;歡迎查閱您的實時互動日報。本欄目實時聚焦、每日更新【AI】、【泛娛樂】、【語音交互】、【實時音視頻】等領域熱點&#xff0c;歡迎大家在評論區一起探討&#xff01; &#x1f528;「產品技術」 …