バッテラが如く

プログラミングしましょ!

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

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


※この記事の情報は次のバージョンで動作確認しています。

  • MacOS Monterey (12.1)
  • 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;
    }
    

    これで実行すると・・・

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

    プレイヤーの中心ではなく少しずらしたいのであればオフセット用の変数をして位置を書き換えることもできます。

     [SerializeField] float _offset;
    
    ~~~~~~~省略~~~~~~~~
    
    pos.x = _target.transform.position.x + _offset;
    

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

    あとがき

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

    docs.unity3d.com