# 登录 ## 分类 - 项目功能 ## 目的 记录登录流程、登录窗口、网络交互和进入游戏后的衔接关系。 ## 关键文件 | 用途 | 路径 | 说明 | |---|---|---| | 登录管理器 | `Assets/Game/GameHFScripte/GameFunction/Logic/Login/HFLoginManager.cs` | 单例,负责连接服务器、发送登录协议、处理登录后事件链 | | 登录窗口 | `Assets/Game/GameHFScripte/GameFunction/UIWindows/Login/LoginWindow.cs` | 继承 `AbsHFUIWindow`,绑定输入框和登录按钮 | | 登录 Prefab | `Assets/Game/GameHFResource/UIWindows/Login/LoginWindow.prefab` | 窗口资源,由 `HFAssetBundlePath` 指定 | | 启动入口 | `Assets/Game/GameHFScripte/GameFunction/GameRoot/HFGameStart.cs`(待确认) | 初始化 manager 并打开 `LoginWindow` | ## 数据流 ```text [启动] HFGameStart.InitManager -> OpenWindow [用户点击] LoginWindow.OnBtnLogin -> 校验用户名非空 -> PlayerPrefs 保存用户名/密码 -> HFLoginManager.Instance.Login(InputName.text) [连接服务器] HFLoginManager.Login(account) -> UNITY_EDITOR 下读取 EditorPrefs["IPData"] 覆盖 IP -> HFSeverManager.ReConnect(OnReConnect) -> HFSeverManager.Connect(MainConnect, WebSocket, m_IP, m_Port, m_Token, callback) -> 连接成功后 OnSendLogin [登录协议] OnSendLogin -> LoginAuthC2S ServerId = 10001 Token = m_Token Pid = "2126001" UserName = m_Account Password = m_Account [服务端响应链] LoginAuthS2C (ErrorCode == 0) -> PlayerSelectC2S -> PlayerSelectS2C 有角色:PlayerEnterC2S 无角色:PlayerCreateC2S -> PlayerEnterC2S -> PlayerEnterS2C -> PlayerFlushC2S(All = true) -> RequestLoginData 触发后续背包、资源等初始化 ``` ## 关键协议 - `LoginAuthC2S` / `LoginAuthS2C` - `PlayerSelectC2S` / `PlayerSelectS2C` - `PlayerCreateC2S` / `PlayerCreateS2C` - `PlayerEnterC2S` / `PlayerEnterS2C` - `PlayerFlushC2S` / `PlayerFlushS2C` - `ChangeNicknameC2S` / `ChangeNicknameS2C` ## 已确认流程 当前登录入口: ```text HFGameStart.InitManager -> OpenWindow -> LoginWindow.OnBtnLogin -> HFLoginManager.Login(InputName.text) ``` `HFLoginManager.Login` 流程: ```text Login(account) -> 读取 EditorPrefs["IPData"] 覆盖 IP(仅 UNITY_EDITOR) -> ConnectServer -> HFSeverManager.ReConnect(OnReConnect) -> HFSeverManager.Connect(MainConnect, WebSocket, m_IP, m_Port, m_Token) -> OnSendLogin -> LoginAuthC2S.Dispatch ``` 服务端事件链: ```text LoginAuthS2C -> PlayerSelectC2S -> PlayerSelectS2C -> 有角色:PlayerEnterC2S -> 无角色:PlayerCreateC2S -> PlayerEnterC2S -> PlayerEnterS2C -> PlayerFlushC2S(All = true) ``` `LoginWindow` 会把用户名和密码写入 `PlayerPrefs`,但实际登录请求当前使用用户名作为 account,密码未参与 `LoginAuthC2S`。 ## 梳理任务 - [x] 找到登录功能的入口方法和首个调用点。 - [x] 梳理登录请求、响应和错误处理。 - [x] 梳理登录成功后初始化了哪些 manager。 - [x] 梳理登录窗口 prefab 和脚本绑定关系。 - [ ] 确认登录完成后进入主界面或 PVE 的流程。 ## 待确认 - 登录是否区分游客、账号、平台登录。 - 登录数据是否会初始化背包、关卡、角色/塔数据。 - 是否存在断线重连或重新登录流程。 - `PlayerFlushS2C` 收到后由谁打开主界面,目前未确认。 - 密码输入框当前只保存到 `PlayerPrefs`,是否应参与登录待确认。 ## 相关框架 - [网络框架](../../../modules/frameworks/网络系统.md) - [UI 框架](../../../modules/frameworks/UI窗口系统/README.md) - [Hotfix 启动/目录](../../../modules/frameworks/Hotfix启动.md) --- ## 文档关联 > **注意**:当本模块发生变更时,应同步检查以下关联文档,避免信息不一致。 ### 关联模块 | 模块 | 文档 | 关联原因 | |---|---|---| | 背包 | [背包](背包.md) | 登录成功后 `RequestLoginData` 触发背包初始化 | | 奖励/道具展示 | [奖励/道具展示](奖励道具.md) | 登录流程涉及资源、道具配置 | | GM/调试功能 | [GM/调试功能](GM调试.md) | `HFLoginManager` 在 Editor 下读取 `EditorPrefs["IPData"]` 覆盖 IP | | PVE/关卡战斗 | [PVE/关卡战斗](PVE关卡战斗.md) | 登录后进入主界面或 PVE 的流程衔接 | | 地图/关卡进度 | [地图/关卡进度](地图进度.md) | 登录后角色数据与关卡进度同步 | ### 关联框架文档 | 框架 | 文档 | 关联原因 | |---|---|---| | 网络框架 | [网络框架](../../../modules/frameworks/网络系统.md) | 登录协议(`LoginAuthC2S/S2C`、`PlayerEnterS2C` 等) | | UI 框架 | [UI 框架](../../../modules/frameworks/UI窗口系统/README.md) | `LoginWindow` 继承 `AbsHFUIWindow` | | Hotfix 启动/目录 | [Hotfix 启动/目录](../../../modules/frameworks/Hotfix启动.md) | `HFGameStart.InitManager` 为入口 | | 事件框架 | [事件框架](../../../modules/frameworks/事件系统/README.md) | `RequestLoginData` 触发后续初始化事件链 | | 场景框架 | [场景框架](../../../modules/frameworks/场景系统.md) | 登录后进入主界面涉及场景切换 | ### 关联规则 | 规则 | 文档 | 关联原因 | |---|---|---| | 模块登记规则 | [30-模块登记规则.md](../../../rules/30-模块登记规则.md) | 登录模块登记与状态 | | 归档规则 | [50-归档规则.md](../../../rules/50-归档规则.md) | 变更后需同步归档相关文档 | | 架构说明 | [10-架构说明.md](../../../rules/10-架构说明.md) | 登录为游戏入口,涉及整体架构 | | 开发规则 | [20-开发规则.md](../../../rules/20-开发规则.md) | 网络协议、UI 窗口开发规范 | ### 关联 Spec / OpenSpec | Spec | 文档 | 关联原因 | |---|---|---| | 规则工作流 Spec | [2026-06-11-rules-workflow-v1.md](../../../specs/Spec索引.md) | 项目文档和规则系统建立 |