Skip to content

Cinematics and Camera

SSOrangeCATY edited this page Sep 16, 2026 · 1 revision

演出、死亡镜头与观战

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 将最终机位限制在死亡锚点到目标位置的可见线段内,减少穿墙。

时间流程:

  1. 播放 40 tick 死亡表现。
  2. 若已有有效目标,立即交给基础观战视角。
  3. 若目标尚未加载,最多继续等待 40 tick。
  4. 超时后降级到受限死亡位置视角。

观战目标数据包在死亡和过场期间仍持续更新状态,不再通过拦截数据包锁住相机。因此场景结束时可以直接使用最新目标。绑定真实队友实体的一人称观战继续保留 TaCZ 手部与枪械状态;C4 环绕观战使用独立环绕 rig。

输入、HUD 与后处理

镜头策略统一控制移动、交互、F5、观战切换、手部、HUD、本地玩家模型、toast、原版晃动和 TaCZ 后坐力。聊天、命令、Esc 和场景界面操作仍可使用。

死亡滤镜只关闭自己创建的 PostChain。Minecraft 因相机实体切换重置后处理时,场景通过镜头绑定回调重新安装效果,不会误关其他系统后来设置的资源。

清理与异常路径

下列情况会释放相关会话和输入限制:

  • 重生或切换玩家生命周期。
  • 换边、地图重置和比赛结束。
  • 退服、维度/世界卸载。
  • 更高优先级场景抢占。
  • 镜头求值、有效条件或时间轴回调失败。

场景清理具有幂等性;旧会话句柄和迟到网络消息不能影响新的镜头所有者。

协议与验证

入场序列加入后,BlockOffensive 网络协议升级为 1.6.0。客户端与服务器必须同时更新 BlockOffensive 和配套 FPSMatch 快照。

自动检查覆盖死亡阶段时序、姿态采样、镜头抢占、旧句柄、时间轴标记和指令树。开发客户端已验证换边预览、演出替换、死亡镜头、C4 观战接管及退出后的视角恢复。

当前仍需继续实机覆盖多人队友第一人称枪械同步;测试环境未加载 playerAnimator/bendy-lib,因此演员骨骼动画只验证了降级路径。

FPSMatch 通用 API 见 FPSMatch 镜头系统。

Clone this wiki locally