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