多分、簡単に出来る方法で2通りあるかと。探したらもっとたくさんあると思うんですけど。
CinemachineVirtualCameraを使う
- メニュー[Cinemachine]→「CreateVirtualCamera」
- VirtualCameraのインスペクタからFollowとLookAtにプレイヤーキャラを入れる
- Bodyを「Orbital Transposer」に変更
- Bodyの「BlendingMode」を「Lock To Target Assign」にする
- XaxisのValueを変更すれば、キャラクターを中心に円形軌道上で回転する
- XAxisのInputAxisNameはUnityのInputシステムを使った名前です
- カメラの高さとプレイヤーからの距離は「FollowOffset」のYとZを変更する
補足
RecenterToTargetHeadingをEnableにしておくと(デフォルトではOn)Xaxisの値が勝手に0になります。
X軸の値を変更するときは、UnityのInputシステムを使っていればAxisNameに入力名を入れるだけですが、スクリプトから変更したい場合は、
1 2 3 4 5 6 7 8 |
using Cinemachine; CinemachineVirtualCamera _vcam; ~~~~~~~~~~~~~~~ CinemachineOrbitalTransposer _orbTrans = _vcam.GetCinemachineComponent<CinemachineOrbitalTransposer>(); _orbTrans.m_XAxis.m_InputAxisValue = value //プレイヤーからの距離と高さをVector3 offsetで指定 Vector3 offset = new Vector3(0,高さ(float値),距離(float値)); _orbTrans.m_FollowOffset = offset; |
みたいな感じで入力できるはず。
それとAxisStateはVector3と同じようにstructで値型です。
1 2 |
AxisState xaxis = orbtrans.m_Xaxis; xaxis.m_InputAxisValue = value; |
上のようにやると、orbtransのm_Xaxisを参照してないので変化しません。ちょっとはまってしまった……。
CinemachineFreeLookを使う
設定項目が多くて手間取る。
出来ることは、OrbitalTransposerに加えて、Y軸の値からTop,Middle、Bottomの3段階で軌道を調整できることです。
要はカメラの移動を細かく調整できるってことが言いたい。
Orbits(軌道)タブからターゲットへの距離を設定できます。
カメラの位置は、ターゲットから「Height」の高さで「Radius」距離の円状の起動になります。
YAxisの値から「TopRig」「MiddleRig」「BottomRig」の範囲を移動します。
動画の赤い線上をカメラが移動することになります。
各RigのRadiusの値を揃えると、ぐりぐり動かなくて見やすくなるかも。
ざっくりですが。
パラメータを微調整すれば良い感じに出来るはず。