Unity6における新しいInput Systemを使ったキーボード入力の技術資料
OnMove
イベントを使用することで、より簡単にキャラクターの動きを処理できます。以下に、OnMove
イベントを使った方法を説明します。
目次
OnMove
イベントを使ったInput Systemの実装
1. Input Systemの設定
- Unity6ではすでにインストール済みです
- まだの場合は、リンクのステップに従ってインストールしてください。
2. Input Actionsアセットの設定
- Unity6ではすでに設定済みです
- まだの場合は、上記リンクのステップに従ってインストールしてください。
3. Player Inputコンポーネントの追加
- キャラクターのゲームオブジェクト(今回はCube)に
PlayerInput
コンポーネントをアタッチ(Add Componeボタンから)します。
- Input Actionsに最初から作成されているInput Actionsアセット(
InputSystem_Actions
)を割り当てます。
3. PlayerController
スクリプトの作成
- 新しいC#スクリプトを作成し、
OnMove
イベントを実装します。
using UnityEngine;
using UnityEngine.InputSystem;
public class PlayerController : MonoBehaviour
{
private Vector2 moveInput;
// `OnMove`イベントメソッド
public void OnMove(InputAction.CallbackContext context)
{
moveInput = context.ReadValue<Vector2>(); // 入力の取得
Debug.Log("Move Input: " + moveInput);
}
private void Update()
{
// キャラクターの動きをここで制御します
float moveX = moveInput.x;
float moveZ = moveInput.y; // moveY を moveZ に変更
transform.Translate(new Vector3(moveX, 0, moveZ) * Time.deltaTime);
}
}
4. PlayerInput
コンポーネントの設定
- キャラクターのゲームオブジェクト(今回はCube)に作成したPlayerContollerコンポーネントをアタッチします
- Player Inputコンポーネントの設定で、
Behavior
を「Invoke Unity Events」に変更します。
5. イベントの設定
- Player Inputコンポーネントの設定で、
Events > PlayerのMove(CallBackContext)
を開きます - Moveイベントに作成したPlayerControllerのOnMoveメソッド(イベント)を割り当てます
- Moveイベントに作成したPlayerControllerのOnMoveメソッド(イベント)を割り当てます
PlayerController
スクリプトのOnMove
メソッドはMove
アクションがトリガーされるたびに呼び出されます。
6. 動作確認
- Unityエディターでプレイして、
WASD
キーやゲームパッドでキャラクターが移動するかを確認します。
OnMove
イベントを使用することで、入力イベントを簡潔に処理でき、コードが整理されます。必要に応じて、他のイベント(OnJump
など)も同様の方法で設定できます。
この PlayerController
スクリプトは、Unity の新しい Input System
パッケージを使用して、プレイヤーキャラクターの移動を制御するものです。以下にコードの詳細な説明をします。
コードの構造と説明
- ライブラリのインポート
using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine
: Unity の基本的な API を使用するためのライブラリです。ゲームオブジェクトの管理や、物理演算、描画などが含まれています。using UnityEngine.InputSystem
: 新しいInput System
パッケージを使用するためのライブラリです。このパッケージは複雑な入力処理を可能にし、キーボード、マウス、コントローラー、タッチなどに対応します。
PlayerController
クラス
public class PlayerController : MonoBehaviour
PlayerController
はMonoBehaviour
を継承しており、Unity のコンポーネントとして使用できます。このスクリプトは、プレイヤーキャラクターにアタッチして動作させます。
- 変数の宣言
private Vector2 moveInput;
moveInput
:Vector2
型の変数です。プレイヤーの移動入力(左右と前後)を格納します。Vector2
は2次元ベクトルで、X と Y の成分を持ちます。
OnMove
イベントメソッド
public void OnMove(InputAction.CallbackContext context)
{
moveInput = context.ReadValue<Vector2>(); // 入力の取得
Debug.Log("Move Input: " + moveInput);
}
OnMove
メソッドは、Input System
の入力イベントに対応して呼び出されます。例えば、WASDキーやゲームパッドのアナログスティックの入力を処理します。context.ReadValue<Vector2>()
:Vector2
型の入力値を取得します。例えば、Wキーを押すとmoveInput.y
が正の値になり、Dキーを押すとmoveInput.x
が正の値になります。Debug.Log
: 入力値をコンソールに出力して、デバッグ用の情報を表示します。
Update
メソッド
private void Update()
{
// キャラクターの動きをここで制御します
float moveX = moveInput.x;
float moveZ = moveInput.y; // moveY を moveZ に変更
transform.Translate(new Vector3(moveX, 0, moveZ) * Time.deltaTime);
}
Update
メソッドは毎フレーム呼び出されます。ここで、キャラクターの移動を制御します。moveX
:moveInput.x
の値を取得し、X軸方向の移動量を決定します(左右の動き)。moveZ
:moveInput.y
の値を取得し、Z軸方向の移動量を決定します(前後の動き)。このようにmoveZ
に変更することで、Unity の3D空間で X軸と Z軸の移動を正しく反映しています。transform.Translate
: キャラクターを指定された方向に移動させるメソッドです。Vector3
型で移動量を指定し、Time.deltaTime
を掛けてフレームレートに依存しない動きを実現しています。
まとめ
- Input System:
Input System
パッケージを使用して、プレイヤーの入力(WASDキーやゲームパッドの入力など)をキャッチし、OnMove
メソッドでその入力を取得しています。 - 移動処理:
Update
メソッドで取得した入力を使ってキャラクターを移動させます。X軸(左右)と Z軸(前後)に沿って移動し、Time.deltaTime
を掛けることでフレームレートによる影響を防いでいます。 - デバッグ:
Debug.Log
で入力値を確認できるようにしています。これにより、入力のデバッグが簡単になります。
ディスカッション
コメント一覧
まだ、コメントがありません