コンテンツへスキップ

【Unity 3D ボールころころ】③ プレイヤー(ボール)の作成


概要

プレイヤーをキーボードで操作できるようにします。また、物理演算の機能を追加します。これにより、地面との接触などを計算してくれるようになります。

STEP1:Rigidbody(物理演算)を追加する

① ヒエラルキー上の「Player」を選択し、インスペクター内の「コンポーネントを追加」をクリックします。

Rolling-Balls3-1

② 「Physics」を選択します。

Rolling-Balls3-2

③ 「Rigidbody」を選択します。

Rolling-Balls3-3

Rigidbody を追加したら、ゲームを再生してみてください。下記のようにボールが地面に落下すれば OK です。

STEP2:新しい入力方式 Input System をインストールする

Input Systemは、キーボードやマウス、ゲームパッドなど、さまざまな入力デバイスからの入力を汎用的に扱うことができます。従来の Input Manager に比べて、より強力で柔軟性が高く、設定しやすい入力システムとなっています。PC やスマホなど、マルチプラットフォームに対応するゲームを作るとき、Input System は必須の機能といえます。

① Unity のメニュー「ウィンドウ」⇒「パッケージマネージャー」を選択します。

Rolling-Balls3-4

② 「Unity レジストリ」を選択し、リストから「Input System」をクリックします。「インストール」ボタンが表示されるのでこれをクリックします。

Rolling-Balls3-5

③ インストールが完了すると、下記の画面が表示されます。「Yes」を選択して「Input System」を有効化します。

Rolling-Balls3-6

上記の手順を実施して、Unity が再起動されたら「Input System」のインストールは完了です。

STEP3:コンポーネント「Player Input」の追加

① ヒエラルキーから「Player」を選択します。「コンポーネントを追加」⇒「Input」を選択します。

Rolling-Balls3-7

② 「Player Input」を選択します。

Rolling-Balls3-8

③ インスペクター内の「Player Input」の中にある「Create Actions…」をクリックします。

Rolling-Balls3-9

④ 「Input」というフォルダを作成し、そのフォルダの中にファイル(.inputactions)を保存します。

Rolling-Balls3-10

STEP4:スクリプトファイルの作成

① プロジェクト内の「Assets」を右クリックし、「作成」⇒「フォルダー」を選択します。フォルダ名を「Scripts」として保存します。

Rolling-Balls3-11

② ① で作成した「Scripts」を右クリックして、「作成」⇒「C# スクリプト」を選択します。ファイル名を「PlayerController」とします。

Rolling-Balls3-12

Player オブジェクトと、PlayerController(C# スクリプト)を紐づけます。ヒエラルキーから「Player」を選択します。次に、「Assets」⇒「Scripts」フォルダ内にある「PlayerController」をインスペクタービューの空いているところにドラッグアンドドロップします。

Rolling-Balls3-13

STEP5:プログラミング

using UnityEngine;
using UnityEngine.InputSystem;

public class PlayerController : MonoBehaviour
{
    private Rigidbody rb;
    private float inputX;
    private float inputY;

    private void Start()
    {
        rb = GetComponent<Rigidbody>();
    }

    private void OnMove(InputValue inputValue)
    {
        Vector2 inputVector = inputValue.Get<Vector2>();
        inputX = inputVector.x;
        inputY = inputVector.y;
    }

    private void FixedUpdate()
    {
        Vector3 v3 = new Vector3(inputX, 0.0f, inputY);
        rb.AddForce(v3);
    }
}

■ 12 行目:rb
 Player オブジェクトにアタッチされている Rigidbody コンポーネントを取得します。Rigidbody は物理演算処理を実行するコンポーネントで、これを利用してボールを転がします。

■ 15 行目:OnMove メソッド
 移動アクションが発生するたびに、このメソッドが呼び出されます。移動アクションとは、WASD キー、矢印キー、コントローラーのジョイスティックなどを動かしたときのことです。

■ 17 行目:inputVector
 キーボードなどのデバイスからの入力を取得します。

■ 25 行目:
 入力された方向に AddForce メソッドを使って力を加えます。

ここまでできたら、ボールが転がるスピードを変更してみましょう。25 行目の AddForce メソッドの引数の値を、掛け算を使って大きくしたり小さくしたりしてみましょう。例えば、スピードを速くする場合は下記のようになります。

rb.AddForce(v3 * 10);

次は、カメラがプレイヤーを追いかけるようにプログラミングします。