【Unity】【Cinemachine】Virtual CameraのOrbital Transposerでキャラの周囲をぐるっと回るカメラを作る

CinemachineのVirtual CameraのOrbital Transposerの使い方をまとめます。

Unity2018.4
Cinemachine2.2.9

はじめに

この記事では、CinemachineのVirtual CameraのBodyをOrbital Transposerに設定した時のモードについて説明します。

f:id:halya_11:20190627125034p:plain

説明の前提として、Binding ModeはLock To Target With World Upにします。

f:id:halya_11:20190627125215p:plain

Binding Modeについては、詳細を知りたい方はTransposerの記事を参照してください。

light11.hatenadiary.com

またVirtual CameraのAimはComposerにして常にキャラの方向を向かせておきます。

f:id:halya_11:20190627125408p:plain

なお、Cinemachineの基本的な使い方やVirtual Cameraの設定方法は本記事では説明しません。
これらは以下の記事にまとめていますので、必要に応じて参照してください。

light11.hatenadiary.com

対象の周囲をぐるっと回るカメラを作れる

さてそれでは基本的な設定をしていきます。

Virtual CameraのBodyをOrbital Transposerに設定し、Binding Modehは前述の通りLock To Target With World Upに設定しておきます。
またRecenter To Target HeadingをOFFにしておきます。このHeading周りについては後述します。

f:id:halya_11:20190627125828p:plain

この状態でXAxisのValueを動かすと対象の周囲の円に沿ってカメラが動くことがわかります。

f:id:halya_11:20190627130116g:plain

この対象の周囲の円上をカメラが動く、というのがOrbital Transposerの本質的なポイントです。
ちなみにXAxisのValueは直接スクリプトから操作してもいいし、Input Axis Nameを入力してUnityのInput Systemと連動させることもできます。

f:id:halya_11:20190627130337p:plain

カメラが向くデフォルトの方向を決めるHeading

さて次に、前節でさりげなくOFFにしたRecenter To Target HeadingをONにします。

f:id:halya_11:20190627130636p:plain

これはXAxisのValueに一定時間変化がなかったらカメラをデフォルト方の位置に戻します。
要はユーザ入力がしばらくなかったらカメラをデフォルト位置に戻す機能です。

f:id:halya_11:20190627130854g:plain

じゃあデフォルトの位置とは何なのか?
それを決めるのがHeadingという概念です。

例えばHeadingのDefinitionをTarget Forwardにすると「対象が向いている方向を映す位置」がカメラのデフォルト位置となります。

f:id:halya_11:20190627131012p:plain

HeadingのDefinitionには以下の種類があります。

名前 説明
Target Forward 対象が向いている方向を映す位置
Position Delta 前フレームから位置が動いた方向を映す位置
Velocity Rigid BodyのVelocityが示す方向を映す位置
Rigid BodyがなかったらPosition Deltaと同じ動きになる
World Forward ワールド空間のZ方向を映す位置

またBiasの値をいじればDefinitionからのオフセットを定義できます。

f:id:halya_11:20190627132337g:plain

何に使うのか① キャラのビューアー

さてこれでOrbital Transposerの説明は大体終わりました。
となるとじゃあこれは何に使うのか?キャラに追従するだけならTransposerでよくない?という話になります。

パッと思いつくのはキャラクターのビューアーです。

f:id:halya_11:20190627133549g:plain

このようなものはOrbital Transposerを使えばすごく簡単に作れます。

何に使うのか② キャラのコントロールができない場面におけるユーザ入力用

もう一つ思いつくのは、キャラが自動的に歩いてるようなシーンでユーザ入力でキャラの周囲を見れるような仕組みです。

f:id:halya_11:20190627124727g:plain

例えば自由にキャラを動かせるゲームで、部屋間を移動するときだけユーザからコントロールを奪って自動でキャラが動く、という仕様があるとします。
このような時に単純にコントロールを奪って固定のカメラにするだけでは味気ないので、上記のようなカメラにすることが考えられます。

関連

light11.hatenadiary.com

light11.hatenadiary.com

light11.hatenadiary.com

light11.hatenadiary.com

参考

docs.unity3d.com