Appearance
HUD系统
文档版本:基于 2026-06-01 代码分析
面向对象:开发者与高级管理员 | 本文档描述HUD系统的技术实现。
概述
HUD(Heads-Up Display)系统在游戏进行中为玩家提供实时信息叠层。包含 坐标显示、准星玩家信息、存活逃走者列表、游戏倒计时和复活阶段标记五项功能。猎人和工作人员可见全部信息,逃走者仅可见坐标。
核心概念
可见性权限
| 信息模块 | HUNTER/NPC | RUNNER |
|---|---|---|
| 坐标显示 | ✅ | ✅ |
| 准星玩家信息 | ✅ | ❌ |
| 存活逃走者列表 | ✅ | ❌ |
| 游戏倒计时 | ✅ | ❌ |
| 复活阶段标记 | ✅ | ❌ |
坐标模式
| 模式 | 显示内容 |
|---|---|
world | 绝对世界坐标(x, y, z) |
local | 相对原点偏移(x-originX, y-originY, z-originZ) |
架构设计
HUD 渲染布局
mermaid
graph TB
subgraph Screen["屏幕空间"]
subgraph TopLeft["左上角"]
Alive["存活逃走者列表<br/>isHunterOrNpc可见"]
end
subgraph BottomLeft["左下角"]
Timer["游戏倒计时<br/>isHunterOrNpc可见"]
end
subgraph BottomRight["右下角"]
Crosshair["准星玩家信息<br/>isHunterOrNpc可见"]
Coord["坐标显示<br/>全体可见"]
end
end时间同步机制
mermaid
flowchart LR
Server["服务端<br/>SyncRfmGameStatePayload"] -->|"syncMillis + serverNowMillis"| Client["客户端<br/>RfmGameClientState"]
Client -->|"serverToClientOffset校准"| Now["getElapsedSecondsNow()<br/>getRemainingSecondsNow()"]关键文件
| 文件 | 说明 |
|---|---|
com/chenxi/chenxi_rfm/client/event/ClientRfmHudEvents.java | HUD 渲染主入口 |
com/chenxi/chenxi_rfm/client/event/ClientPhoneCallHudEvents.java | 通话状态HUD(独立) |
com/chenxi/chenxi_rfm/client/rfm/RfmGameClientState.java | 游戏状态+时间校准 |
com/chenxi/chenxi_rfm/client/rfm/RfmHudClientState.java | HUD数据状态 |
关键流程
坐标显示
- 位置:屏幕右下角
- 格式:
64,128,456(逗号分隔,无空格) - 颜色:
0xA0D0D0D0 - WORLD 模式直接显示玩家坐标;LOCAL 模式减去原点偏移
准星玩家信息
- 从玩家眼睛位置发射 24 格射线
- 先检测方块碰撞缩短距离
- 再检测玩家实体碰撞
- 命中后从
RfmHudClientState查找角色数据 - 显示格式(6 种标签):
[逃走者] 玩家名/[猎人] 玩家名/[工作人员] 玩家名/[逃走者-叛节者] 玩家名/[弃权] 玩家名/[出局] 玩家名
存活逃走者列表
- 正常阶段:标题"剩余存活逃走者: N人",逐行列出玩家昵称
- 复活阶段:标题切换为"剩余待复活逃走者: N人"
- 仅在
shouldShowHud()为 true 时渲染
游戏倒计时
- 格式:
游戏倒计时: XX分XX秒 - 使用客户端校准后的时间计算
- 左下角
注意事项
- 复活阶段HUD内容自动切换(存活列表→待复活列表)
- 时间校准考虑网络延迟(
serverToClientOffset) - 所有HUD仅在游戏状态 != IDLE 时渲染
- 通话HUD独立于RFM HUD系统:
ClientPhoneCallHudEvents在非手机界面时渲染通话状态条(见手机GUI注意事项)