【Unity】Project TCC で遊ぼう~UC-02-03 Cinemachine TPS Control: TPS視点のカメラを実装します~

UC-02-03 Cinemachine TPS Control Unity
UC-02-03 Cinemachine TPS Control

Unity の Project TCC を触って、Unity の機能を学んでいきましょう。

Project TCC で遊ぼう~UC-02-03 Cinemachine TPS Control: TPS視点のカメラを実装します~

UC-02-03 Cinemachine TPS Control
UC-02-03 Cinemachine TPS Control

UC-02-03 Cinemachine TPS Control

変更点の確認

UC-02-03_Cinemachine_TPS_Control シーンを開きます。
Unityエディター上で再生して、ユニティちゃんを動かしてみましょう。
TPS(サードパーソン・シューティングゲーム)のようにカメラを操作することができます。

UC-02-02_Cinemachine_LookAt シーンと違うところは、Virtual Camera オブジェクトの CinemachineVirtualCamera コンポーネントの Body に 3rd Person Follow が設定されています。
そして、右クリックしている間は Virtual Camera_Aim オブジェクトが有効になります。

シーンの複製

UC-02-02_Cinemachine_LookAt シーンを複製して、UC-02-03_Cinemachine_TPS_Control_Copy という名前にします。

CinemachineBrain コンポーネントの設定

Main Camera オブジェクトの CinemachineBrain コンポーネントの Default Blend に 0.1 を設定します。
Virtual Camera を切り替えるときに、すばやく切り替わるようになります。

CinemachineBrain の設定
CinemachineBrain の設定

CinemachineVirtualCamera コンポーネントの設定

Virtual Camera オブジェクトの CinemachineVirtualCamera コンポーネントの Lens を設定します。

Lens の設定
Lens の設定

Virtual Camera オブジェクトの CinemachineVirtualCamera コンポーネントの Body に 3rd Person Follow を設定します。

Body の設定
Body の設定

Virtual Camera オブジェクトの CinemachineVirtualCamera コンポーネントの Aim に Do nothing を設定します。

Virtual Camera_Aim オブジェクトの作成

Virtual Camera オブジェクトを複製して、Virtual Camera_Aim という名前にします。
Virtual Camera_Aim オブジェクトを無効にします。

Virtual Camera_Aim の作成
Virtual Camera_Aim の作成

CinemachineVirtualCamera コンポーネントの Body の Camera Distance に 1.2 を設定します。

Virtual Camera_Aim の設定
Virtual Camera_Aim の設定

Camera Root オブジェクトの作成

Player オブジェクトを右クリックして Create Empty を選択して、Camera Root という名前にします。

Camera Root の作成
Camera Root の作成

Virtual Camera オブジェクトと Virtual Camera_Aim オブジェクトの CinemachineVirtualCamera コンポーネントの Follow に Camera Root オブジェクトを設定します。

Follow の設定
Follow の設定

TpsCameraControl コンポーネントの追加

Player オブジェクトに TpsCameraControl コンポーネントを追加します。
TpsCameraControl コンポーネントの Camera Root に Camera Root オブジェクトを設定します。
TpsCameraControl コンポーネントの User Settings に Assets/TCC/Scenes/02_Camera/Data_UC-02-03_TPS_Control/UC-02-03_TPS_TCC Camera Settings を設定します。

TpsCameraControl の追加
TpsCameraControl の追加

Input Action Asset の設定

Assets/TCC/Scenes/02_Camera/Data_UC-02-02_Cinemachine_LookAt フォルダを複製して、Data_UC-02-03_TPS_Control_Copy という名前にします。

フォルダの複製
フォルダの複製

Input Action Asset(Data_UC-02-03_TPS_Control_Copy)を選択して、Edit asset を押します。
Actions に Look を追加します。

Look の追加
Look の追加

Binding Properties に Delta [Pointer] を設定します。

Delta [Pointer] の設定
Delta [Pointer] の設定

Actions に Aim を追加します。

Aim の追加
Aim の追加

Binding Properties に Right Button [Mouse] を設定します。

Right Button [Mouse] の設定
Right Button [Mouse] の設定

Player オブジェクトの PlayerInput コンポーネントの Actions に Input Action Asset(Data_UC-02-03_TPS_Conrol_Copy)を設定します。

PlayerInput の設定
PlayerInput の設定

Animator コンポーネントの設定

Player オブジェクトの Animator コンポーネントの Controller に Assets/TCC/Scenes/02_Camera/Data_UC-02-03_TPS_Control/UC-02-03_TPS を設定します。

Animator の設定
Animator の設定

MyPlayer スクリプトの作成

Player オブジェクトに新規作成の C#スクリプト MyPlayer を追加します。
MyPlayer の内容はこちらになります。

using System.Security.Claims;
using Unity.TinyCharacterController.Control;
using UnityEngine;
using UnityEngine.InputSystem;

public class MyPlayer : MonoBehaviour {
    private PlayerInput m_rPlayerInput;
    private InputAction m_rLook;
    private InputAction m_rAim;
    private TpsCameraControl m_rTpsCameraControl;
    private Animator m_rAnimator;
    [SerializeField] private GameObject m_rAimingCamera;

    private void Awake() {
        TryGetComponent<PlayerInput>(out m_rPlayerInput);
        if (m_rPlayerInput != null) {
            m_rLook = m_rPlayerInput.actions["Look"];
            m_rAim = m_rPlayerInput.actions["Aim"];
        }
        TryGetComponent<TpsCameraControl>(out m_rTpsCameraControl);
        TryGetComponent<Animator>(out m_rAnimator);
    }

    private void Start() {
        Cursor.visible = false;
        Cursor.lockState = CursorLockMode.Locked;
    }

    private void OnEnable() {
        if (m_rLook != null) {
            m_rLook.performed += OnLook;
        }
        if (m_rAim != null) {
            m_rAim.performed += OnAim;
            m_rAim.canceled += OnAimStop;
        }
    }

    private void OnDisable() {
        if (m_rLook != null) {
            m_rLook.performed -= OnLook;
        }
        if (m_rAim != null) {
            m_rAim.performed -= OnAim;
            m_rAim.canceled -= OnAimStop;
        }
    }

    private void Update() {
        if (m_rAnimator != null) {
            int nTurnPriority = 0;
            bool bAimingCamera = false;
            if (m_rAnimator.GetBool("Aiming")) {
                nTurnPriority = 10;
                bAimingCamera = true;
            }
            if (m_rTpsCameraControl != null) {
                m_rTpsCameraControl.TurnPriority = nTurnPriority;
            }
            if (m_rAimingCamera != null) {
                m_rAimingCamera.SetActive(bAimingCamera);
            }
        }
    }

    private void OnLook(InputAction.CallbackContext context) {
        if (m_rTpsCameraControl != null) {
            Vector2 value = context.ReadValue<Vector2>();
            m_rTpsCameraControl.RotateCamera(value);
        }
    }

    private void OnAim(InputAction.CallbackContext context) {
        if (m_rAnimator != null) {
            m_rAnimator.SetBool("Aiming", true);
        }
    }

    private void OnAimStop(InputAction.CallbackContext context) {
        if (m_rAnimator != null) {
            m_rAnimator.SetBool("Aiming", false);
        }
    }
}

MyPlayer スクリプトの Aiming Camera に Virtual Camera_Aim オブジェクトを設定します。

Aiming Camera の設定
Aiming Camera の設定

動作確認

Unityエディターで再生して、動作確認します。
ユニティちゃんを動かすと、TPS(サードパーソン・シューティングゲーム)のようにカメラを操作できます。

まとめ

Project TCC で、TPS(サードパーソン・シューティングゲーム)のようにカメラを操作できるようにしました。
Cinemachine を使用すると、いろいろな種類のゲームを作成することができます。

コメント

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