MC Toolkit

指南 / 命令与数据

不用模组的摄像机过场动画:关键帧、插值与旁观者模式技巧

原版移动摄像机的方式只有一种——逐刻传送函数——而时间轴注册表则负责烘托氛围。各自擅长什么,以及如何平滑处理才能不显得机械,用传送方式做镜头时,每秒需要 20 个关键帧,十秒的镜头就得写两百行传送命令。

原版中并不存在摄像机实体,所以过场动画本质上是用传送堆出来的幻觉,再配合时间轴来改变周围的世界。

方法一:每刻传送玩家

这是最古老、最通用的做法。把玩家设为旁观者模式,然后让他们沿路径移动:

gamemode spectator @s
tp @s 100.0 70.0 200.0 -90.0 10.0

通过函数链每刻执行一次 tp。它在所有版本上都能用,不需要任何特殊条件。问题全都出在平滑度上:

  • 每秒 20 个关键帧。 一个十秒的镜头就是 200 行 tp。
  • 线性步进看起来很机械。 真实的摄像机运动有缓入缓出。
  • 旋转的环绕处理很糟糕。 从偏航角 170 到 -170 是 20 度的转向,但朴素的插值会朝错误方向旋转 340 度。在步进之前,先把角度差归一化到 -180…180 的范围内。

生成这些行正是关键帧工具的用途——你放置少量位置点,它就会输出带有缓动效果的逐刻函数。

缓动

业余和可看之间的差别就在于插值曲线。在两个关键帧之间,用 t 从 0 到 1:

linear      t
ease-in-out t < 0.5 ? 2t²  :  1 − 2(1−t)²
smoothstep  t² × (3 − 2t)

smoothstep 是安全的默认选择。把它同时应用到位置和旋转上,否则摄像机会在转完之前就到达终点。

方法二:时间轴,用于摄像机之外的一切

较新版本加入了一个 timeline 注册表,很容易让人以为它是摄像机轨道:

data/<namespace>/timeline/intro.json

但它不是。时间轴基于世界时钟运行,对环境属性做关键帧——天空和雾的颜色、环境音效和音乐、光源方块——并带有原生插值。它无法移动玩家,所以摄像机本身仍然要靠方法一。时间轴擅长的是过场动画的氛围:让天空渐暗、切换雾气、配合传送同步更换音乐,而不需要为每一项都写逐刻命令。

代价是它只存在于较新版本中,所以面向旧客户端的存档只能用 /time 和 /weather 来伪造氛围。

让玩家待在原地

传送路径要和两件事对抗:

  • 玩家输入。 旁观者模式让玩家可以在镜头中途飞走。每刻重新传送会覆盖它,这也是暴力方法一直存在的原因之一。
  • 区块加载。 摄像机飞向未加载的区域会看到虚空。在拍摄前对路径执行 /forceload,拍完后移除。

隐藏 HUD

旁观者模式和 F1 已经能解决大部分问题。要获得干净的画面,可以用一个把 HUD 精灵图清空的资源包来移除准星和快捷栏,而不需要玩家按任何键——参见 HUD 指南。

把关键帧放在路径上并导出逐刻函数,再构建时间轴来布置周围的场景,配合过场动画与时间轴构建器。

过场动画与时间轴生成器 →

更多指南

查看全部 →