Repository navigation
Cinematics and Camera
BlockOffensive 使用 FPSMatch 的统一镜头系统实现死亡镜头、入场演出、换边演出和观战交接。业务层负责比赛阶段、演员和资源,FPSMatch 的 CameraDirector 负责镜头控制权、时间轴、输入策略和清理。
| 场景 | 优先级 | 生命周期 |
|---|---|---|
| 编辑器预留 | 50 | 后续世界沙盘使用。 |
| 死亡镜头 | 100 |
PLAYER_LIFE,重生时结束。 |
| 入场/换边演出 | 200 |
SCENE,可跨重生和预备传送。 |
高优先级会替换低优先级会话。场景结束时不会恢复一个预先保存、可能已失效的相机实体,而是根据当前玩家和观战状态重新解析基础视角。
服务端 IntroRuntimeController 生成 IntroSequence,包括:
- 阵营与阶段。
- 演出区域和朝向。
- 镜头起止位置、朝向和时长。
- 每位演员的起点、移动终点、最终出生点和展示物品。
- 唯一 sequence ID 与服务端起始 game time。
客户端 IntroClientController 接收序列后申请过场镜头,通过共享 SequenceClock 同步镜头、演员、HUD 和音效。相邻镜头姿态连续插值;迟到包按照服务端 game time seek,持续状态会补齐,已经错过的瞬时音效不会集中重播。
PREARM 可以在正式传送或重生前建立黑幕并跨过玩家生命周期。正式序列会直接接管同一镜头所有权;旧序列的 STOP 或完成消息不能关闭新序列。
演员动画优先使用 playerAnimator/bendy-lib;缺少依赖时仍会显示移动和构图,只省略对应骨骼动画。TaCZ 展示武器通过独立兼容路径处理,避免污染真实玩家动画缓存。
所有演出管理指令位于:
/fpsm blockoffensive halftime ...
常用配置流程:
/fpsm blockoffensive halftime select dust2 ct <from> <to>
/fpsm blockoffensive halftime facing dust2 ct 90 0
/fpsm blockoffensive halftime duration dust2 ct 90
/fpsm blockoffensive halftime enable dust2 switch true
/fpsm blockoffensive halftime preview dust2 ct
配置保存在世界目录的 serverconfig/blockoffensive-halftime-intro.json。side 为 ct 或 t,时长限制为 60–140 tick。完整语法见 API 与接口文档。
死亡开始时,客户端先使用受限固定镜头等待服务端旁观状态。正式死亡演出使用无状态连续姿态采样,并通过 CollisionRig 将最终机位限制在死亡锚点到目标位置的可见线段内,减少穿墙。
时间流程:
- 播放 40 tick 死亡表现。
- 若已有有效目标,立即交给基础观战视角。
- 若目标尚未加载,最多继续等待 40 tick。
- 超时后降级到受限死亡位置视角。
观战目标数据包在死亡和过场期间仍持续更新状态,不再通过拦截数据包锁住相机。因此场景结束时可以直接使用最新目标。绑定真实队友实体的一人称观战继续保留 TaCZ 手部与枪械状态;C4 环绕观战使用独立环绕 rig。
镜头策略统一控制移动、交互、F5、观战切换、手部、HUD、本地玩家模型、toast、原版晃动和 TaCZ 后坐力。聊天、命令、Esc 和场景界面操作仍可使用。
死亡滤镜只关闭自己创建的 PostChain。Minecraft 因相机实体切换重置后处理时,场景通过镜头绑定回调重新安装效果,不会误关其他系统后来设置的资源。
下列情况会释放相关会话和输入限制:
- 重生或切换玩家生命周期。
- 换边、地图重置和比赛结束。
- 退服、维度/世界卸载。
- 更高优先级场景抢占。
- 镜头求值、有效条件或时间轴回调失败。
场景清理具有幂等性;旧会话句柄和迟到网络消息不能影响新的镜头所有者。
入场序列加入后,BlockOffensive 网络协议升级为 1.6.0。客户端与服务器必须同时更新 BlockOffensive 和配套 FPSMatch 快照。
自动检查覆盖死亡阶段时序、姿态采样、镜头抢占、旧句柄、时间轴标记和指令树。开发客户端已验证换边预览、演出替换、死亡镜头、C4 观战接管及退出后的视角恢复。
当前仍需继续实机覆盖多人队友第一人称枪械同步;测试环境未加载 playerAnimator/bendy-lib,因此演员骨骼动画只验证了降级路径。
FPSMatch 通用 API 见 FPSMatch 镜头系统。