Guides / Commands & Data

无模组运镜:关键帧、插值与旁观者模式技巧

在原版《我的世界》中实现镜头移动的两种方法——逐刻传送函数与时间轴注册表。本文将介绍它们各自的适用场景,以及如何通过平滑处理避免画面僵硬。

原版《我的世界》中没有“摄像机”对象,因此所谓的“运镜”实际上是以下两种错觉之一。

方法一:每刻传送玩家

这是老旧但通用的方法。将玩家设置为旁观者模式,然后沿着路径移动他们:

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 是安全的默认选项。将其同时应用于位置和旋转,否则镜头会在完成转向之前到达目的地。

方法二:时间轴注册表

较新版本增加了时间轴格式,它将整个镜头描述为数据,而不是数百个传送命令:

data/<namespace>/timeline/intro.json

带有时间点和插值模式的关键帧,通过一个命令即可播放。优点:

  • 文件小得多。 六个关键帧代替了两百个传送命令。
  • 原生插值,无需手动计算缓动。
  • 帧率无关——它不会像在负载较高的服务器上那样,出现逐刻传送导致的卡顿。

缺点是它只存在于最新版本中,因此针对旧客户端的地图仍然需要方法一。

保持玩家不动

两种方法都需要解决两个问题:

  • 玩家输入。 旁观者模式允许玩家在镜头播放中途飞走。每刻重新传送会覆盖玩家输入,这也是暴力方法仍然存在的原因之一。
  • 区块加载。 摄像机飞到未加载的区域会显示虚空。在镜头播放前 /forceload 路径,播放后移除。

隐藏HUD

/gamerule doImmediateRespawn、旁观者模式和F1键可以帮你完成大部分工作。为了获得干净的画面,一个清空HUD精灵的资源包可以在玩家不按任何键的情况下移除准星和快捷栏——请参阅HUD指南。

在路径上放置关键帧,并使用运镜与时间轴构建器导出逐刻函数或时间轴JSON。

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

More guides

Browse all →

还想找别的我的世界工具?

一整套在浏览器里运行的生成器、查看器和转换器,全部免费。