[Unity 3D] モンハン、マリオ64等のプレイヤーを中心にカメラが回転して追尾する処理


タイトル通りですがモンハン、マリオ64等のプレイヤーを中心にカメラが回転して追尾する処理の作り方です。提示コードをそれぞれにアタッチするとカメラがプレイヤーを追尾して尚且つプレイヤーを中心に回転してカメラから見ての方向にプレイヤーその方向に向きます。

プレイヤーにアタッチ
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerControl : MonoBehaviour
{

    public GameObject camera;
    public float moveSpeed = 10;

    private Rigidbody rigidbody;

    // Start is called before the first frame update
    void Start()
    {
        rigidbody = GetComponent<Rigidbody>();    
    }

    // Update is called once per frame
    void Update()
    {
        float x = Input.GetAxisRaw("Horizontal");
        float z = Input.GetAxisRaw("Vertical");

        Vector3 cameraForward = Vector3.Scale(camera.transform.forward, new Vector3(1, 0, 1)).normalized;
        Vector3 moveForward = (cameraForward * z) + (camera.transform.right * x);
        rigidbody.velocity = moveForward * moveSpeed;


        if( (inputHorizontal != 0) || (inputVertical != 0) )
        {
            transform.rotation = Quaternion.LookRotation(moveForward,transform.up);
        }
        

    }
}

カメラにアタッチ
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CameraControl : MonoBehaviour
{
    public GameObject player;
    public float rotateSpeed = 5;   //回転速度

    private Vector3 offset; //プレイヤーとの距離

    // Start is called before the first frame update
    void Start()
    {
        offset = player.transform.position;
    }

    // Update is called once per frame
    void Update()
    {
        Rotate();   //カメラ回転
        Move();     //追尾
    }

    /*########################################## 追尾 ##########################################*/
    private void Move()
    {

        transform.position += player.transform.position - offset;
        offset = player.transform.position;


    }

    /*########################################## 回転 ##########################################*/
    private void Rotate()
    {
        Vector3 angle = new Vector3(Input.GetAxis("Mouse X") * rotateSpeed, Input.GetAxis("Mouse Y") * -rotateSpeed, 0);

        transform.RotateAround(player.transform.position, Vector3.up, angle.x);
        transform.RotateAround(player.transform.position, transform.right, angle.y);
    }
}