Files

162 lines
5.7 KiB
Markdown
Raw Permalink Normal View History

# 登录
## 分类
- 项目功能
## 目的
记录登录流程、登录窗口、网络交互和进入游戏后的衔接关系。
## 关键文件
| 用途 | 路径 | 说明 |
|---|---|---|
| 登录管理器 | `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>
[用户点击]
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>
-> 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) | 登录模块登记与状态 |
2026-07-10 17:50:20 +08:00
| 文档同步规则 | [50-文档同步规则.md](../../../rules/50-文档同步规则.md) | 长期接口或流程变化时同步模块文档 |
| 架构说明 | [10-架构说明.md](../../../rules/10-架构说明.md) | 登录为游戏入口,涉及整体架构 |
| 开发规则 | [20-开发规则.md](../../../rules/20-开发规则.md) | 网络协议、UI 窗口开发规范 |