Unity で一人称コントローラーを作成する

このチュートリアルでは、Unity でシンプルな一人称コントローラーを構築する手順を説明します。一人称コントローラーを使用すると、プレイヤーはスムーズな動きとカメラの回転で 3D の世界を探索できます。基本的な C# スクリプトと Unity の組み込み CharacterController コンポーネントを使用します。

1. シーンの設定

まず、一人称コントローラーの基本的なシーン環境を設定します。

  1. Unity で、新しい 3D シーンを作成します。
  2. 地面を作成するには、GameObject > 3D Object > Plane に移動します。
  3. 飛行機のスケールを調整して、プレイヤーが歩き回れる大きさにします。
  4. 相互作用する障害物や壁を追加するには、GameObject > 3D Object > Cube に移動します。

2. プレイヤーオブジェクトの追加

プレイヤーを表すために、カプセル オブジェクトを使用します。

  • シーンにカプセルを追加するには、GameObject > 3D Object > Capsule に移動します。
  • カプセルを地面より少し上に配置します (例: Position = (0, 1, 0))。
  • カプセルの名前をPlayerに変更します。
  • CharacterController が衝突を処理するため、Capsule Collider コンポーネントを削除します。
  • Player を選択し、インスペクターで コンポーネントの追加 をクリックして CharacterController を検索し、Player オブジェクトに CharacterController コンポーネントを追加します。

3. 一人称コントローラー スクリプトの作成

次に、プレーヤーの動きとカメラの回転を処理するスクリプトを作成しましょう。

  1. プロジェクト ウィンドウで右クリックし、作成 > C# スクリプト を選択します。FirstPersonController という名前を付けます。
  2. プロジェクト ウィンドウから階層内のプレーヤーにスクリプトをドラッグして、プレーヤー オブジェクトにスクリプトをアタッチします。

スクリプトを開き、内容を次のコードに置き換えます。

using UnityEngine;

public class FirstPersonController : MonoBehaviour
{
    public float moveSpeed = 5f;
    public float mouseSensitivity = 2f;
    public float gravity = -9.81f;

    private CharacterController controller;
    private Vector3 velocity;
    private Transform cameraTransform;

    void Start()
    {
        controller = GetComponent();
        cameraTransform = Camera.main.transform;
        cameraTransform.position = new Vector3(transform.position.x, transform.position.y + 1.5f, transform.position.z);
        cameraTransform.parent = transform; // Attach camera to player
    }

    void Update()
    {
        // Player movement
        float moveX = Input.GetAxis("Horizontal") * moveSpeed;
        float moveZ = Input.GetAxis("Vertical") * moveSpeed;
        Vector3 move = transform.right * moveX + transform.forward * moveZ;

        controller.Move(move * Time.deltaTime);

        // Apply gravity
        if (controller.isGrounded && velocity.y < 0)
        {
            velocity.y = -2f;
        }
        velocity.y += gravity * Time.deltaTime;
        controller.Move(velocity * Time.deltaTime);

        // Camera rotation
        float mouseX = Input.GetAxis("Mouse X") * mouseSensitivity;
        float mouseY = Input.GetAxis("Mouse Y") * mouseSensitivity;

        transform.Rotate(Vector3.up * mouseX);
        cameraTransform.Rotate(Vector3.left * mouseY);
    }
}

4. カメラの取り付け

一人称視点の場合、カメラをプレイヤーに接続する必要があります。

  • 階層でメインカメラを選択します。
  • Player オブジェクトの少し上に配置します (例: Y = 1.5)。
  • カメラを階層内の Player オブジェクトにドラッグして、Player の子にします。これにより、カメラがプレイヤーの動きや回転に追従するようになります。

5. 入力の設定

Unity の入力マネージャーは、移動には「水平」や「垂直」などの定義済みの軸名を使用し、マウス入力には「マウス X」や「マウス Y」を使用します。これらは自動的に構成されますが、[編集] > [プロジェクト設定] > [入力マネージャー] で感度を調整できます。

6. コントローラーのテスト

一人称コントローラーの準備ができたので、再生ボタンを押してテストします。

  • W、A、S、D を使用して、プレイヤーを前方、後方、横に移動します。
  • マウスを動かすとカメラが回転し、周囲を見渡すことができます。
  • 高く上がった物体から降りて、プレイヤーが自然に落ちるかどうかを確認して、重力が機能していることを確認します。

7. コントローラーの強化

次のものを追加することで、一人称コントローラーをさらに強化できます。

  • Shift キーを押しながら移動速度を上げることで、スプリント機能が有効になります。
  • プレイヤーがスペースバーを押したことを検知し、上向きの速度を適用するジャンプ ロジック。
  • 登ったりしゃがんだりするメカニズムにより、プレイヤーと環境とのより複雑なインタラクションが可能になります。

結論

この基本的な一人称コントローラーを使用すると、3D 環境を探索するための機能的なプレーヤー設定が完成します。スクリプトをカスタマイズして拡張することで、ゲームのニーズに合わせてさらに多くの機能やインタラクションを追加できます。