Unity Cinemachineでターゲットを注視する俺俺カメラリグを作り撮影を効率化する
こういう奴。
もしかしたら標準でできるのかもしれないけど、わからないので自作。
カメラリグとか言われてる奴。CinemachineのLook atにEmptyを指定して、それを操作することによってカメラを制御する。
標準のインスペクターやギズモで指定する方法では、カメラをアニメーションさせる時にちょっと大変。なので、注視したい場所を視覚的にわかりやすくすることで制御しやすく、かつ効率化できる。
キャラクターに注視させれば、カメラを動かすだけで良い感じに撮影できる。ターゲットも同時に移動させれば、さらに複雑なアニメーションができる。
ただキャラクターに注視させるだけなら、キャラクターを対象にlook atすれば良いのだけど、途中で対象を変えたり、なにもない場所をみたい時など、汎用性を高めるためにEmptyを利用する。
アフターエフェクトとかBlenderとかでアニメーション作る時の定番なので、映像畑にはこちらの方が慣れてる人が多いかも。
基本的にはEmptyにCinemachineとEmptyをひとまとめにして、それぞれわかりやすい名前をつけ、Cinemachineのlook atにCinemachineと同じ場所にあるEmptyを設定します。ただ、このままではシーンビュー上では何も表示されないのでどこにあるかわからず、直接クリックもできないので、スクリプトでギズモを出します。
using UnityEngine;
[ExecuteInEditMode]
public class CinemachineTargetGizmo : MonoBehaviour
{
public float gizmoSize = 0.2f;
public float gizmoAlpha = 0.5f;
public Color gizmoColor = Color.yellow;
void OnDrawGizmos()
{
Color transparentColor = new Color(gizmoColor.r, gizmoColor.g, gizmoColor.b, gizmoAlpha);
Gizmos.color = transparentColor;
Gizmos.DrawWireSphere(transform.position, gizmoSize / 2);
GUIStyle style = new GUIStyle();
style.normal.textColor = gizmoColor;
}
}
これでギズモが表示され、インスペクターで透明度やギズモのサイズも調整できる。
もう一歩進んでもう少し使いやすくした
実際に使っていると、いくつか不満点が出たのでもう少しだけ改良した。