【Unity】スクリプトで横軸だけ追尾するカメラを作る

Unity (2021.3.2f1)

今回はキャラに合わせてカメラも動的に移動させるスクリプトを作ってみたいと思います!

追尾しないカメラだとどうなるのか?

置いてかれた(笑)

UnityではCameraで映したものがゲーム画面として表示されますが、
Cameraがキャラに合わせて動くわけではありませんのでキャラが移動するとこのように置いてかれます。

横軸以外のカメラ画角を決める

横軸以外は位置固定にするので、エディタで好きな画角になるように調整します。

スクリプト実装

新規スクリプトをCameraにアタッチしてプログラムを作っていきます。

追尾するターゲットをスクリプトで参照

追尾するターゲットを外から設定できるように変数を追加します。

[SerializeField] GameObject _target;

targetにはプレイヤーなどの追尾したいものをセットするイメージです。

ターゲットの位置を取得しカメラの位置と同期させる

ターゲット座標のXとカメラ座標のXを同値にしていきます。

void Update()
{
    if (_target == null) return;

    Vector3 pos = transform.position;
    pos.x = _target.transform.position.x;
    transform.position = pos;
}

これで実行すると・・・

結構いい感じですが常に画面に中心にになります。

中心からずらすためのオフセットを設ける

プレイヤーの中心ではなく少しずらすことで見た目を変えることができます。

これは簡単でオフセット用の変数を作ってそれを足し込んであげればおkです。

 [SerializeField] float _offset;

~~~~~~~省略~~~~~~~~

pos.x = _target.transform.position.x + _offset;

offsetを調整することでこのように少しずらすことができます。

あとがき

Unityで追尾と言ったらCinemachineを使うのが一般的な選択肢だと思いますが、
Cinemachineは理解していないと逆に思ったことができないと思います。
もし簡単なカメラ操作であればスクリプトで実装した方が思った通りになってくれます。

docs.unity3d.com