開発ブログ

株式会社Nextatのスタッフがお送りする技術コラムメインのブログ。

電話でのお問合わせ 075-744-6842 ([月]-[金] 10:00〜17:00)

  1. top >
  2. 開発ブログ >
  3. Unity >
  4. 【Unity】Input Systemを使ってみた
【Unity】Input Systemを使ってみた

【Unity】Input Systemを使ってみた

こんにちは、ホンジョウです。
今回は久しぶりにUnityの記事を書いていこうと思います。
今までUnityの入力処理はInput Managerしか触っていませんでしたが、Unity 6から標準でInput Systemが導入されていることに気がついたので、ついに重い腰を上げてInput Systemで入力処理を扱ってみようと思いました。
 

開発環境

  • Mac OS Sequoia 15.3.1
  • Unity 6 (6000.0.29f1)

プロジェクトの立ち上げ

Unity 6でプロジェクトを作成すると、すでにInputSystem_Actionsが作成されています。
こちらを開いてみると、いくつかの基本的なアクションが登録されていることが確認できます。
inputsystem_window1.png
今回はこちらのアクションをそのまま使って進めていきます。

プレイヤー用Scriptの作成

Sceneにカプセルオブジェクトを配置して、これを操作するキャラクターとして扱います。 カプセルオブジェクトのColliderを削除して、CharacterControllerを追加します。
作成するScriptの名前は「Player」としておきましょう。今回はInputActionに登録されている「Move」の入力に合わせて、Playerを移動させるScriptを作成します。

using UnityEngine;
using UnityEngine.InputSystem;

public sealed class Player : MonoBehaviour
{
    [SerializeField] private float moveSpeed;
    [SerializeField] private CharacterController characterController;

    private Vector2 inputMove;

    // Player Inputが読み取る用の関数
    public void OnMove(InputAction.CallbackContext context)
    {
        // MoveのControl TypeはVector2なので、Vector2を読み取る
        inputMove = context.ReadValue<Vector2>();
    }
    
    void Update()
    {
        var moveVelocity = new Vector3(inputMove.x, 0, inputMove.y) * moveSpeed;
        var moveDelta = moveVelocity * Time.deltaTime;

        characterController.Move(moveDelta);
    }
}
OnMove()は、あとでPlayerオブジェクトに追加する「Player Input」というコンポーネントが読み取るために、publicにしておきます。

Playerオブジェクトの設定

Playerオブジェクトには、以下のコンポーネントを追加します。
  • Character Controller
  • Player(Script)
  • Player Input
コンポーネントに設定する値は以下のようにしておきます。
player.png
「Player Input」のBehaviorを「Invoke Unity Events」にして、「Events」→「Player」→「Move」の場所に、Player.OnMoveを登録します。
これでPlayerを移動させることができるようになります。

UIからの操作

また、InputActionで登録されたキーを、uGUIのButtonに登録することもできます。
以下のような十字キーを、uGUIのButtonを使用して作成しました。
ui.png
作成したButtonに、コンポーネント「On-Screen Button」を追加し、それぞれに対応したキーを登録します。
例えば上矢印キーのボタンはキーボードの「Wキー」に相当するので
button.png
「Control Path」の欄に「W [Keyboard]」を登録します。
すると、キーボードのWASDキーを押したときの挙動をそのまま再現してくれるので、画面に配置したボタンのUIでPlayerが移動できるようになります。
 

ゲームパッドの対応

こちらのページによると、MacではXBox、PS4/5、Switchコントローラーにそれぞれ対応しているようなので、試しに家にあったPS5コントローラーをUSB経由で接続してみたところ、とくに修正もなく、上記の移動処理がPS5コントローラーで動作していることを確認できました。すごいぞInput System。

さいごに

今回はInput Systemを使用した入力処理に関しての簡単な解説でした。
これまで散らかりがちだったUnityの入力処理に、希望の光が見えるような素敵なパッケージだと思います。
更なる調査の進展がありましたらまた記事を更新しようと思います。

参考資料

  • posted by りっちゃん
  • C# , Unity
TOPに戻る