今回は"通常はFreeLookカメラだが特定の状況では横スクロールアクション"のようなカメラに切り替わるのをやってみます。
カメラの位置や動きで3Dゲームの手触り・難易度は大きく変わる
3Dアクションゲームを適当に作ったときに良くあるのが、カメラの視点によって妙に難易度が高いケースです。
例えば下のようなステージを作った場合、自由に視点を移動できるタイプのアクションゲームや一人称視点の場合、妙に難易度が高くなったりします。
その辺り、任天堂を始めとしたアクションゲームでよく見るのが、特定の状況でカメラワークを切り替える動作です。例えば「ジャンプする」ような場所では、足場とプレイヤーの相対位置がよく分かるようなカメラ位置に移動してる事が多いです。
下の図では、横、もしくは斜め上辺りに置いてみました。ジャンプが必要な距離が割と分かりやすくなっています。
ということで、通常はFreeLookなカメラですがステージの特定の位置のみ横スクロールに切り替えるなどして、ストレスを云々する方法について考えてみます。
実際の手順
実際にやってみた手順はこんな感じです。
まずCinemachineでFreeLookCameraを用意して、キャラクターを追跡するようにしました。つまりFollowとLookAtにキャラクターのTransformがセットされている状態です。
次に、横スクロールして欲しい場所にDolly Camera With Trackを用意しました。これは、特定のパスに沿ってカメラを移動させる機能です。
似たようなモノにDolly Track With Cartというものがありますが、自動的に動くカートの上に何かを乗せる系の機能なので、微妙に違います。
カメラを動かすパスを設定します。
DollyTrack1オブジェクトを開いて、WayPointsに開始地点と移動先を設定すればパスが設定されます。
またDollyCameraで追加されたVirtual CameraのFollowとLookAtに追跡するキャラクターのTransformを設定し、AutoDollyにEnableを設定します。
あとはカメラを切り替える範囲と処理をステージに設定します。
まずカメラを切り替える範囲を設定し、ColliderのタイプをTriggerで設定します。後は下のコードを設定して有効にするカメラと現在使用してるカメラを設定すれば、カメラが範囲に入れば切り替わります。
なぜDolly Cameraなのか?
深い理由はありません。ただし、プレイヤーを単純に追跡するタイプのカメラだと、プレイヤーの動きによってカメラが予想外の動きをする事があったので、パス通りに動かしたほうがストレス無いなという判断です。