Unity でGame 制作 #3

前回までのユニゲー(Unity でGame 制作)は…(連続ドラマ風ナレーション)

Playerオブジェクトの移動にカメラを追従させ、マウスで視界を回転(水平方向のみ)できるようになった!

ということで、続きです(=゚ω゚)
視界(カメラ)が追従するようになりましたが、WSADでの移動のみなのでこのままだと使えません。 マウスでの視界回転にPlayerオブジェクトの向きが追従するように改造します。

[Player.cs]

using UnityEngine;

public class Player : MonoBehaviour
{
    [SerializeField] private Vector3 velocity;//移動ベクトル
    [SerializeField] private readonly float moveSpeed = 5.0f;//移動速度
    [SerializeField] private PlayerFollowCamera pfCamera;//追従カメラ <= 追加

    void Update()
    {
        // キー入力判定
        velocity = Vector3.zero;
        if (Input.GetKey(KeyCode.W))
            velocity.z += 1;
        if (Input.GetKey(KeyCode.A))
            velocity.x -= 1;
        if (Input.GetKey(KeyCode.S))
            velocity.z -= 1;
        if (Input.GetKey(KeyCode.D))
            velocity.x += 1;

        // 移動ベクトルを秒単位でmoveSpeedだけ進むように制限
        velocity = velocity.normalized * moveSpeed * Time.deltaTime;

        // 移動中?
        if (velocity.magnitude > 0)
        {
            // プレイヤー回転の更新
            transform.rotation = pfCamera.hRotation;// <= 追加
            // プレイヤー位置の更新
            transform.position += pfCamera.hRotation * velocity;// <= 変更
        }
    }
}

Playerオブジェクトで追従カメラの情報にアクセスできるようにし、update時に位置情報にカメラの回転を加えます。

Script を保存後、Playerオブジェクトに追加されたpfCamera項目にMainCameraを設定します。

Player inspector

移動中(キー入力中)のみ位置情報が反映されるので、マウスのみではオブジェクトは回転しません。

視界が追従するだけでもずいぶんそれっぽくなります(=゚ω゚)ノ