【Unity入門⑥】プレイヤーにカメラを追従させて2Dアクションゲーム感を出そう

Unityで2Dアクションゲームを作ろう! Unity2D入門(シリーズ)

こんにちは!怪獣です🦖

前回の記事ではTilemapでマップを作る方法を解説しました。



横スクロールゲームを作るときに欠かせないのがプレイヤーの歩行に合わせて追従する「カメラの追従処理」です。
プレイヤーが動いてもカメラが止まったままだと、すぐに画面の外に出てしまいます。
今回はプレイヤーに合わせてカメラを動かす基本処理を実装していきます📝

①この記事で出来るようになること

  • プレイヤーの横移動に合わせて追従するカメラ処理を作る

②完成コード(CameraManager.cs)

CameraManager.csを新規作成し、カメラ処理をこちらに書いていきます。(コピペOK!)

using UnityEngine;

public class CameraManager : MonoBehaviour
{
    [Header("追従対象")]
    [SerializeField] private Player _player;     // Inspector側でPlayerオブジェクトをドラッグ

    [Header("カメラ位置オフセット")]
    public Vector3 offset = new Vector3(0f, 0f, -10f); // Zは-10で2D既定の距離

    private Transform _playerT;    // プレイヤーの位置情報を扱うための変数

    void Start()
    {
        // 1) 追従対象の参照を安全に確保
        if (_player == null)
            _player = FindObjectOfType<Player>();

        if (_player != null)
            _playerT = _player.transform;
    }
    // Update のあとに毎フレーム呼ばれる処理
    void LateUpdate()
    {
        if (_playerT == null) return;

        // 2) 「プレイヤーの位置 + オフセット」を 目標位置 として計算
        Vector3 target = _playerT.position + offset;

        // 3) 横スクロール想定
        //    Y座標(縦方向)とZ座標(奥行き) は固定にして「横スクロール専用カメラ」にする
        float nextX = target.x;
        float nextY = transform.position.y;   // 縦は固定(必要なら追従に変更可)
        float nextZ = target.z;               // -10固定

        // 4) 実際にカメラを移動
        transform.position = new Vector3(nextX, nextY, nextZ);
    }
}

LateUpdateはUpdate のあとに毎フレーム呼ばれる関数です。

そのたびに

プレイヤーの位置を取得

カメラを移動

という処理を繰り返すことで、
常にプレイヤーを追従するカメラが完成します!

1行1行の処理が何をしているかは以下の記事で詳しく解説しているので、
ご興味あればこちらも参照してみてください🦖


③カメラにCameraManagerを適用する

カメラオブジェクト(MainCamera)を選択した状態でAdd Componentをクリックし、
先ほど作ったCameraManagerを選択します。

「追従対象」にプレイヤーをドラッグします。


④動作確認

  1. ゲームを再生し、プレイヤーを左右に歩かせる
    • 右に歩くとカメラが追従する

➡️プレイヤーに合わせてカメラを追従させることが出来ました!


まとめ

  • プレイヤーの位置を基準に、カメラを動かす処理を作成した
  • 縦と奥行きは固定、横だけ追従

カメラを追従させるようにして大分2Dゲームらしくなってきました!
しかしまだ敵が一人もおらず寂しい状態なので、
次回の記事では、いよいよ敵を使っていこうと思います!👾

コメント

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