Guides / Commands & Data

MODなしでカメラカットシーンを実装する方法:キーフレーム、補間、そしてスペクテイターモードの活用

バニラ環境でカメラを動かす2つの方法 — ティックごとのテレポート関数とタイムラインレジストリ。それぞれの利点と、ロボットのような動きを防ぐためのスムーズ化について解説します。

バニラ環境にはカメラオブジェクトが存在しないため、カットシーンは2つの錯覚のいずれかによって実現されます。

方法1:プレイヤーを毎ティックテレポートさせる

古くからある普遍的な方法です。プレイヤーをスペクテイターモードにし、パスに沿って移動させます。

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

これは、関数チェーンから毎ティックtpを実行することで実現されます。すべてのバージョンで動作し、特別なものは何も必要ありません。問題はすべてスムーズさに関するものです。

  • 1秒あたり20キーフレーム。 10秒のショットは200行のtpになります。
  • 線形ステップは機械的に見える。 実際のカメラの動きは、ゆっくりと開始し、ゆっくりと終了します。
  • 回転のラップが悪い。 ヨー角170度から-170度への移動は20度の回転ですが、単純な補間では340度逆方向に回転してしまいます。ステップする前に、角度の差を-180〜180度の範囲に正規化してください。

これらの行を生成するのがキーフレームツールの役割です。いくつかの位置を配置するだけで、イージングが適用されたティックごとの関数が出力されます。

イージング

アマチュアと視聴に耐えうるものの違いは、補間曲線にあります。2つのキーフレーム間で、tが0から1の場合:

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

smoothstepは安全なデフォルトです。位置と回転に同時に適用しないと、カメラが回転を終える前に到着してしまいます。

方法2:タイムラインレジストリ

新しいバージョンでは、ショット全体を数百のテレポートではなくデータとして記述するタイムライン形式が追加されました。

data/<namespace>/timeline/intro.json

時間と補間モードを持つキーフレームが、単一のコマンドで再生されます。利点:

  • はるかに小さい。 200回のテレポートではなく、6つのキーフレームで済みます。
  • 補間がネイティブなので、手動でのイージング計算は不要です。
  • フレームレートに依存しない — ロードされたサーバー上でティックごとのテレポートのように途切れることはありません。

欠点は、最近のバージョンにしか存在しないため、古いクライアントを対象とする地図では依然として方法1が必要になることです。

プレイヤーを固定する

どちらの方法も2つのことと戦います。

  • プレイヤーの入力。 スペクテイターモードでは、プレイヤーがショットの途中で飛び去ってしまう可能性があります。毎ティック再テレポートすることでこれを上書きできますが、これが力ずくの方法が残っている理由の1つです。
  • チャンクの読み込み。 アンロードされた場所にカメラが飛ぶと、虚空が表示されます。ショットの前にパスを/forceloadし、ショット後に削除してください。

HUDを非表示にする

/gamerule doImmediateRespawn、スペクテイターモード、F1キーでほとんどの目的は達成できます。クリーンなフレームを得るには、HUDスプライトを空白にするリソースパックを使用すると、プレイヤーが何も押さなくてもクロスヘアとホットバーが削除されます — HUDガイドを参照してください。

パス上にキーフレームを配置し、Cutscene & Timeline Buildersを使用して、ティックごとの関数またはタイムラインJSONのいずれかを出力します。

カットシーン & タイムラインビルダー →

More guides

Browse all →

ほかのマインクラフトツールをお探しですか?

ブラウザだけで動くジェネレーター・ビューア・変換ツールの数々。すべて無料です。