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