追従カメラはあえて回さない ― 向きを固定して位置だけ追いかける設計
ベルトスクロールアクション用の追従カメラを、向きと高さを固定し、位置だけを滑らかに追いかける形で作りました。4種類の視点プリセットと、2種類の追従方式の使い分けを説明します。
- Unity
- カメラ
- ゲーム設計
アクションゲームのカメラは、プレイヤーが気づかないうちに 遊びやすさを大きく左右します。このプロジェクトのカメラは、 向きと高さは固定し、位置だけを滑らかに追いかけるという シンプルな方針で作りました。
キャラクターの向きには追従させない
3D のアクションゲームでは、キャラクターの背中側にカメラが回り込む 三人称視点がよく使われます。しかし、このプロジェクトでは、 キャラクターが向きを変えてもカメラは回りません。
理由は、ジャンルがベルトスクロールだからです。 このジャンルでは、プレイヤーは画面を横に進みながら、 左右から来る敵と戦います。キャラクターは頻繁に左右に振り向きますが、 そのたびにカメラが回ってしまうと、画面の向きがめまぐるしく変わり、 敵の位置を把握できなくなります。
画面の向きがいつも同じであることは、このジャンルの前提です。 どちらが進行方向で、敵がどこから来るのかが常に一目で分かる。 それがあるから、プレイヤーは目の前の戦いに集中できます。
そのため、カメラの向きは毎フレーム、決められた角度に強制的に 設定し直しています。何かの拍子に向きがずれても、すぐに元に戻ります。
4つの視点プリセット
カメラの見下ろし角度は、4つのプリセットから選べるようにしました。
| プリセット | 角度 | イメージ |
|---|---|---|
| 真上 | 90 度 | 真上からの見下ろし |
| クォーター | 45 度 | 斜め上からの見下ろし |
| 斜め | 30 度 | 往年の家庭用 RPG のような浅い見下ろし |
| 真横 | 0 度 | 格闘ゲームのような真横 |
製品版の既定はクォーター、つまり 45 度の見下ろしです。 ベルトスクロールでは奥行き方向の位置関係が重要なので、 真横からだと奥行きが見えず、真上からだとキャラクターの姿が見えません。 斜め 45 度は、その両方をほどよく見せられる角度です。
それ以外のプリセットは、主にデバッグや検証のために使います。 たとえば真横の視点にすると、攻撃判定の高さが正しいかを確認しやすくなりますし、 真上からにすると、奥行き方向の当たり判定の範囲を確かめやすくなります。 一つのカメラで視点を切り替えられると、こうした確認作業が非常に楽になります。
2つの追従方式
カメラがプレイヤーを追いかける動き方は、2種類から選べます。
滑らかに減速しながら追いかける方式は、目標から遠いときは速く、 近づくにつれてゆっくりになります。動き出しと止まり際が自然なので、 普段のプレイではこちらを既定にしています。 追いつくまでの時間の目安を設定できるので、カメラの「重さ」を調整できます。
一定の速さで追いかける方式は、目標に向かって一定の速度で近づきます。 動きが機械的になる代わりに、カメラがどれだけ遅れるかが読みやすくなります。 挙動の検証や、特定の演出で使うことを想定しています。
更新のタイミング
カメラの位置の計算は、キャラクターの移動がすべて終わったあとに行います。 キャラクターより先にカメラを動かしてしまうと、 1 フレーム前の位置を追いかけることになり、画面が細かく震えて見えることがあります。
また、シーンの切り替え時やゲーム開始時には、滑らかな追従ではなく、 一瞬で目標位置に移動させる機能も用意しています。 これがないと、ゲーム開始の瞬間にカメラが遠くからすーっと飛んでくる、 という不自然な動きになってしまいます。
あえて作らなかったもの
このカメラには、意図的に入れなかった機能もあります。
- キャラクターの向きに合わせた回転
- 壁にめり込まないようにする衝突回避
- 複数のキャラクターの中間を追いかける機能
どれも便利な機能ですが、今必要なものではありません。 必要になったときに、このカメラを複雑にするのではなく、 別のコンポーネントとして作る方針です。 一つの部品に何でも詰め込むと、どこを変えれば何が変わるのかが分からなくなるからです。