【Unity】プレイヤーに追従するカメラ(2D)

Unity-プレイヤーに追従するカメラ(2D) Unity
スポンサーリンク

今回は2Dゲームでプレイヤーに追従するカメラを実装する方法について書いていきます。

実装サンプル

オブジェクトの準備

今回のサンプルスクリプトでは追従対象のオブジェクトを名前で取得しています。
「Player」という名前のオブジェクトを作成して、適当なスクリプトをアタッチして移動ができるようにしておきます。

スクリプト

下記のスクリプトをカメラオブジェクトにアタッチします。
プレイヤー座標に合わせる際、z座標も同じにしてしまうとカメラがオブジェクトにぴったりくっついて表示がおかしくなってしまうのでz座標のみ元のカメラの座標のままにしています。

using UnityEngine;
/// <summary>
/// カメラをプレイヤーに追従させるスクリプト
/// </summary>
public class FollowPlayer : MonoBehaviour
{
    private GameObject player;  // プレイヤーのオブジェクト
    void Start()
    {
        // プレイヤーを取得
        player = GameObject.Find("Player");
    }
    void LateUpdate()
    {
        // カメラの移動処理
        MoveCamera();
    }
    /// <summary>
    /// カメラの座標をプレイヤーの座標に合わせる
    /// </summary>
    void MoveCamera()
    {
        Vector2 pos = player.transform.position;
        // プレイヤーの座標に合わせる(zは変えない)
        transform.position = new Vector3(pos.x, pos.y, transform.position.z);
    }
}

このスクリプトで大事なのは「LateUpdateでカメラを移動させている」部分です。
軽く解説しておくと、UnityではUpdateの処理が終わった後にLateUpdateの処理が行われます。
もしカメラの移動処理をUpdateで書いていた場合、プレイヤーの移動処理の前にカメラの移動処理が入ってしまう可能性があり、画面がカクついてしまうなど不具合の原因になってしまいます。
なのでLateUpdateでカメラ移動処理を行うことで「プレイヤーの移動→プレイヤーに合わせてカメラを移動」の順で確実に処理を行えるようになります。

実行結果

実行結果です。
白い四角がプレイヤーです。
(赤い丸はちゃんと移動しているのが分かるようにするために置いただけです。)

背景がないので分かりにくいかもしれませんが、プレイヤーに追従してカメラも動いています

コメント

タイトルとURLをコピーしました