見出し画像

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;
    }
}

これでギズモが表示され、インスペクターで透明度やギズモのサイズも調整できる。

もう一歩進んでもう少し使いやすくした

実際に使っていると、いくつか不満点が出たのでもう少しだけ改良した。


いいなと思ったら応援しよう!