追従カメラはあえて回さない ― 向きを固定して位置だけ追いかける設計

ベルトスクロールアクション用の追従カメラを、向きと高さを固定し、位置だけを滑らかに追いかける形で作りました。4種類の視点プリセットと、2種類の追従方式の使い分けを説明します。

/ 約 1,462 字

  • Unity
  • カメラ
  • ゲーム設計

アクションゲームのカメラは、プレイヤーが気づかないうちに 遊びやすさを大きく左右します。このプロジェクトのカメラは、 向きと高さは固定し、位置だけを滑らかに追いかけるという シンプルな方針で作りました。

キャラクターの向きには追従させない

3D のアクションゲームでは、キャラクターの背中側にカメラが回り込む 三人称視点がよく使われます。しかし、このプロジェクトでは、 キャラクターが向きを変えてもカメラは回りません

理由は、ジャンルがベルトスクロールだからです。 このジャンルでは、プレイヤーは画面を横に進みながら、 左右から来る敵と戦います。キャラクターは頻繁に左右に振り向きますが、 そのたびにカメラが回ってしまうと、画面の向きがめまぐるしく変わり、 敵の位置を把握できなくなります。

画面の向きがいつも同じであることは、このジャンルの前提です。 どちらが進行方向で、敵がどこから来るのかが常に一目で分かる。 それがあるから、プレイヤーは目の前の戦いに集中できます。

そのため、カメラの向きは毎フレーム、決められた角度に強制的に 設定し直しています。何かの拍子に向きがずれても、すぐに元に戻ります。

4つの視点プリセット

カメラの見下ろし角度は、4つのプリセットから選べるようにしました。

プリセット角度イメージ
真上90 度真上からの見下ろし
クォーター45 度斜め上からの見下ろし
斜め30 度往年の家庭用 RPG のような浅い見下ろし
真横0 度格闘ゲームのような真横

製品版の既定はクォーター、つまり 45 度の見下ろしです。 ベルトスクロールでは奥行き方向の位置関係が重要なので、 真横からだと奥行きが見えず、真上からだとキャラクターの姿が見えません。 斜め 45 度は、その両方をほどよく見せられる角度です。

それ以外のプリセットは、主にデバッグや検証のために使います。 たとえば真横の視点にすると、攻撃判定の高さが正しいかを確認しやすくなりますし、 真上からにすると、奥行き方向の当たり判定の範囲を確かめやすくなります。 一つのカメラで視点を切り替えられると、こうした確認作業が非常に楽になります。

2つの追従方式

カメラがプレイヤーを追いかける動き方は、2種類から選べます。

滑らかに減速しながら追いかける方式は、目標から遠いときは速く、 近づくにつれてゆっくりになります。動き出しと止まり際が自然なので、 普段のプレイではこちらを既定にしています。 追いつくまでの時間の目安を設定できるので、カメラの「重さ」を調整できます。

一定の速さで追いかける方式は、目標に向かって一定の速度で近づきます。 動きが機械的になる代わりに、カメラがどれだけ遅れるかが読みやすくなります。 挙動の検証や、特定の演出で使うことを想定しています。

更新のタイミング

カメラの位置の計算は、キャラクターの移動がすべて終わったあとに行います。 キャラクターより先にカメラを動かしてしまうと、 1 フレーム前の位置を追いかけることになり、画面が細かく震えて見えることがあります。

また、シーンの切り替え時やゲーム開始時には、滑らかな追従ではなく、 一瞬で目標位置に移動させる機能も用意しています。 これがないと、ゲーム開始の瞬間にカメラが遠くからすーっと飛んでくる、 という不自然な動きになってしまいます。

あえて作らなかったもの

このカメラには、意図的に入れなかった機能もあります。

  • キャラクターの向きに合わせた回転
  • 壁にめり込まないようにする衝突回避
  • 複数のキャラクターの中間を追いかける機能

どれも便利な機能ですが、今必要なものではありません。 必要になったときに、このカメラを複雑にするのではなく、 別のコンポーネントとして作る方針です。 一つの部品に何でも詰め込むと、どこを変えれば何が変わるのかが分からなくなるからです。

← Logs 一覧へ