Unity でGame 制作 #2

前回に引き続きUnityでゲームのようななにかをつくっていきます。

前回WSADでPlayerオブジェクトの移動が可能になったので、今回はカメラがPlayerに追従するようにしてみます。

Scriptファイルを PlayerFollowCamera.cs と言う名前で追加します。

[PlayerFollowCamera.cs]

using UnityEngine;

public class PlayerFollowCamera : MonoBehaviour
{
    [SerializeField] private Transform player;// 追従対象

    [SerializeField] private Vector3 cameraPosition = new Vector3(0, 1.8f, 0);//カメラポジション
    [SerializeField] private float distance = 10.0f;// 追従対象からの距離
    [SerializeField] private Quaternion vRotation;// カメラの垂直回転
    [SerializeField] public Quaternion hRotation;// カメラの水平回転
    [SerializeField] private float turnSpeed = 10.0f;// 回転速度

    void Start()
    {
        // 角度の初期化
        vRotation = Quaternion.Euler(24, 0, 0);
        hRotation = Quaternion.identity;
        transform.rotation = hRotation * vRotation;

        // 位置の初期化
        transform.position = player.position + cameraPosition - transform.rotation * Vector3.forward * distance;
    }

    void LateUpdate()
    {
        // カメラの回転の更新
        if (Input.GetMouseButton(0))//マウス押してる間のみ動かす
        {
            hRotation *= Quaternion.Euler(0, Input.GetAxis("Mouse X") * turnSpeed, 0);
        }

        // カメラの回転(transform.rotation)の更新
        transform.rotation = hRotation * vRotation;

        // カメラの位置(transform.position)の更新
        transform.position = player.position + cameraPosition - transform.rotation * Vector3.forward * distance;
    }
}

[SerializeField] にすることでインスペクタで値の編集ができるようになります。
各項目はcode内のコメントでなんとなくわかるかと思います。

Scriptを保存したら、MainCameraにアタッチしてください。

Main Camera Inspector

Player 項目にPlayerオブジェクトを設定したら準備OKです。

オブジェクトの移動にカメラが追従し、マウスの左右で視点の変更ができるようになりました(=゚ω゚)ノ