NGUI--游戏登录、注册和服务器选择系统​​

项目核心思路

该项目实现了一个完整的游戏账号流程:

  1. ​用户侧流程​​:新用户注册 -> 返回登录 -> 输入账号密码 -> 选择游戏服务器 -> 进入游戏。

  2. ​数据管理​​:所有数据(账号信息、服务器列表、用户选择)都通过 XML 进行本地持久化存储和读取,实现了“记住密码”、“自动登录”等功能。

  3. ​UI 管理​​:采用单例模式和基类继承的方式管理各个 UI 面板,使得面板的显示、隐藏和逻辑调用清晰且高效。

流程图

流程分析

1. 数据模型层 (Model)

 LoginData(登录数据)​

作用​​:存储与用户登录相关的数据

  • ​重要字段​​:

    • userNamepassword: 账号密码。

    • frontServerID: 记录用户上次登录的服务器ID,是实现“上次登录”功能的关键。

    • rememberPWautoLogin: 布尔值,控制是否记住密码和自动登录。

RegisterData(注册数据)​

  • ​作用​​:存储所有已注册的账户信息。

  • ​重要字段​​:

    • registerInfo: 一个序列化字典,键值对为 <用户名, 密码>。这是验证登录信息的基础数据库。

ServerInfoServer(服务器信息)​

  • ​作用​​:定义服务器列表和单个服务器的数据结构。

  • ​重要字段​​ (Server类):

    • id: 服务器唯一标识。

    • name: 服务器名称(如“王者之巅”)。

    • state: 服务器状态(0:正常,1:流畅,2:火爆,3:维护等),用于在UI上显示不同图标。

    • isNew: 是否为新区,用于显示“新”标识。

2. 数据管理层 (Manager)

这个类是整个系统的核心大脑,负责处理所有业务逻辑和数据存取。

LoginMgr(登录管理器)​

  • ​作用​​:​​单例类​​,统筹管理登录、注册、服务器数据的所有操作。

  • ​核心功能​​:

    • ​初始化​​:在构造函数中从XML加载所有数据(LoginDataRegisterDataServerInfo)。

    • ​数据存取​​:提供 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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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;「产品技术」 …