梅雨明け?
駐車場に停めている車が汚れているので洗車しようかと思ったけど「梅雨時期だからどうせ雨が降るし」と理由付けてそのままにしていたら一向に雨が降らず、しょうがないからと洗車をしたらその日の午後に夕立が降って洗車代が無駄になった皆さんこんにちは。今年は梅雨らしい天候にあまり遭遇しないまま猛暑の季節を迎えそうですが水不足等は大丈夫なんでしょうかね?電力供給もひっ迫しているらしいし。
見下ろし型
TPS、FPS視点のゲームと違いクォータービュー見下ろし型ゲームの場合、どうしても操作するキャラクターが建物等の障害物の裏に隠れるといった事象からは逃げることはできません。
そういった場合、隠れている部分のシルエットを表示するという手法を取ることもできますが、それ用のシェーダーが障害物とキャラクターそれぞれで必要となりちょっと面倒です。
なのでもっと単純に考えて、キャラクターが障害物の裏に隠れた時は裏側に別に用意したカメラでキャラクターを撮影して、隠れていない場合は元のカメラで撮影する、といった事ができれば、キャラクターが移動して障害物に隠れて見えなくなる、といった問題の解決になりそうです。
Clear Shot
CinemachineにはClear Shotという機能が用意されています。この機能を使うと対象が障害物に隠れた時、別のカメラに切り替えるカメラワークを実装できます。
Clear Shotを使うにはまず上部メニューからGameObject > Cinemachine > ClearShot Cameraを選択します。
するとシーン内にClearShotのオブジェトとその子オブジェトとしてVirtual Cameraが作られます。
ClearShotは自身の子オブジェトとなっているVirtual Cameraの切り替えを行います。
その為、切り替えるカメラの数だけVirtual Cameraを複製し、それぞれ位置やターゲットを設定しておきます。
ClearShot作成前に作ったVirtual Cameraも切替対象にしたい場合は、Virtual Cameraコンポーネント最下部にあるExtensionsからCinemachine Colliderを選択してアタッチした後、ClearShotの子オブジェトとしてください。
遷移順の設定
上記の設定後、ClearShotオブジェトをInspectorで確認すると自身の子オブジェトとなっているVirtual Cameraがリスト形式で表示されています。このリスト内でPriorityの値→リスト順の順番で切替順番が決定されます。
カメラの切り替え時のアニメーションについてはCinemachine Clear ShotのDefault Blendから指定します。
今回はアニメ無しに切り替える為「Cut」を選択しました。
最後に、撮影対象のキャラクターが障害物の裏に隠れたかどうかの判定はColliderを使って行われるため、障害物の方にColliderがアタッチされていることを確認してください。
ここまで確認できたら実行します。
カメラの対象が障害物に隠れたら別のカメラに切り替わるようになりました。