Camera & controls

Camera Lookahead

先読み追従

進行方向の先を画面に多く映す。

2 / 10

Interactive demo

Preparing the demo…

Camera Lookahead

Drag to orbit, Ctrl/⌘ + scroll to zoom. Use two fingers on touch screens.

This explanation is currently available in Japanese.

ひとことで

カメラの注視点を、プレイヤーの位置そのものではなく進んでいく方向へ少し先にずらす追従のしかたです。プレイヤーを画面の真ん中に置くと、進む先は画面の半分しか見えず、残り半分は通り過ぎた場所に使われてしまいます。先へずらすと、穴や敵に早く気付けて、反応する時間が生まれます。

ゲームでの使いどころ

  • 横スクロールのアクション:右へ走っているときは画面の右側を広く見せる。速く走るほど大きくずらすと、スピード感と見通しを両立できる。
  • レースゲーム・乗り物:速度の向きの先を見せる。カーブでは曲がる先の方向へカメラを振る。
  • 見下ろし型のシューティング:マウスカーソルや右スティックの方向へカメラをずらし、狙う方向を広く見せる。
  • 3D の三人称カメラ:キャラクターの移動方向に合わせて、画面の中心を少し先にずらす。

しくみ

プレイヤーの位置を pp、先読みのずれを oo とし、カメラの注視点を p+op + o にします。ずれの決め方は主に 2 通りです。

  • 向きで決める:o∗=facing×Lo^{*} = \text{facing} \times L。向いている方向へ一定の距離 LL だけずらします。止まっていても前が見えますが、振り向くたびにずれが反対側へ大きく移ります。
  • 速度で決める:o∗=vvmax⁡Lo^{*} = \dfrac{v}{v_{\max}} L。速く走るほど大きくずらし、止まっているときはずらしません。

どちらの場合も、目標のずれ o∗o^{*} へいきなり切り替えると画面が大きく振られるので、指数減衰でなめらかに近づけます。

o←o+(o∗−o)(1−e−k Δt)o \leftarrow o + (o^{*} - o)(1 - e^{-k\,\Delta t})

kk を小さくすると、振り向いたときにカメラがゆっくり反対側へ移り、画面の急な動きが減ります。

実装のポイント

  • ずれと本体の追従を分ける:プレイヤーを追う動き(すぐ追う)と、ずれの変化(ゆっくり)を別々の速さで扱うと、走っている間はしっかり追いつつ、振り向きだけゆっくりにできます。
  • 小さな振り向きを無視する:ちょっと後ろを向いただけで画面が反対側へ流れないよう、同じ向きで一定時間・一定距離動いたときだけずれを切り替えます。
  • デッドゾーンとの併用:デッドゾーンの中心を先読みの位置に置けば、揺れにくさと見通しを両立できます。
  • 縦方向は控えめに:落下中に下を見せるのは役立ちますが、ジャンプのたびに上下へ先読みすると揺れが大きくなります。

つまずきやすい点

  • 振り向きで画面が大きく揺れる:向きで決める方法は、左右に細かく動く場面で画面が行ったり来たりします。追いかける速さを小さくするか、速度で決める方法に切り替えます。
  • ずらしすぎ:プレイヤーが画面の端に寄りすぎると、後ろから来る敵が見えません。画面の幅の 1/4 程度までにとどめます。
  • ステージの端:先読みでずらした位置が、ステージの外を映してしまうことがあります。最後にカメラ制限領域で押し戻します。

デモで試すこと

  1. 「先読みなし」にすると、プレイヤーは常に白い枠(ゲームカメラの範囲)の真ん中にいて、グラフの「前に見えている距離」は約 9 m のままです。
  2. 「速さに応じて」にすると、赤い輪(注視点)が進む方向へ移り、前に見えている距離が約 13 m に増えます。
  3. プレイヤーがコースの端で折り返すとき、グラフが一度下がってからなめらかに戻ることを確かめてください。「ずれの追いかけ方」を大きくすると、切り替えが一瞬になります。
  4. 「向いている方向へ」では、止まっていても前が見えますが、振り向くたびに画面が大きく流れます。

References

Unity Cinemachine Position Composer ↗

A general reference for this subcategory.