前回に引き続き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にアタッチしてください。
Player 項目にPlayerオブジェクトを設定したら準備OKです。
オブジェクトの移動にカメラが追従し、マウスの左右で視点の変更ができるようになりました(=゚ω゚)ノ