Unity情報#1 新InputSystemの導入と利点

2021年9月21日

はじめに

Unityのキーボード入力などが今後変わるので、試しに触ってみる

この記事で得られること

InputSystemの導入方法と利点

(動画内で2回呼ばれている不具合は一番下)

InputSystemの利点

・キーボード入力をスマホのバーチャルパットに変えるときに楽
・Update関数での取得でなくなるからなんか良くなる(困ってないからいまいち)
・複数のコントローラーに対応するのが楽(やってる人少ないからいまいち)
このシステムが標準になる

動画で説明

これ通りやればとりあえずできまっせ

InputSystem導入の手順(Unity2020.3.6f1)

まずはPackageManagerからインポート

ここでYesを選択
新しいInputSystemを使うから前のは使えなくなるよってやつ(設定すれば前のも使える)

適当にPlayerってオブジェクトを作成して、新規にPlayer.csを作成してアタッチ

空のオブジェクトを作成してPlayerInputという名前にして、Add ComponentからPlayerInputを設定(これはInputSystemのコンポーネント)。

PlayerInputコンポーネントのCreate ActionsをクリックしてInputActionsを作成する(Assets以下の適当なフォルダに保存)。

・作成したInputActionsファイルをPlayerInputのActionsにアタッチ
・PlayerInputコンポーネントのBehaviorをInvoke Unity Eventsに設定

Player.csを以下のように編集

using UnityEngine;
using UnityEngine.InputSystem;

public class Player : MonoBehaviour
{
    public void OnMove(InputAction.CallbackContext context)
    {
        Debug.Log(context.ReadValue<Vector2>());
    }
}

ボタンのOnClickを設定するように、PlayerInputコンポーネントのOnMoveにPlayerオブジェクトを設定してOnMove関数を登録する。

あとは実行すると確認できる!

他の入力を設定する

他にもSpaceを押したときにログを出したかったら作成したInputActionsファイルを編集すればOK
InputActionsファイルを開いてActionsの隣にある+ボタンを選択し名前をJumpにする

Bindingというものを設定する必要があり、キーボードのSpace入力なので以下の手順で選択

変更が保存されていない可能性があるのでAuto-Saveにチェックを入れる

あとは、OnMoveと同じ手順で、Player.csにOnJump関数を作って、PlayerInputコンポーネントのOnJumpに設定すればOK。

2回実行されるバグの修正

動画内で、Spaceを1度しか押していないのに、複数回Trueが実行されるバグについては、if文で処理すればいいことがわかりました。

原因はこちらの文献が役に立ちます.

    public void OnJump(InputAction.CallbackContext context)
    {
        if (context.performed)
        {
            Debug.Log(context.ReadValueAsButton());
        }
    }

感想

設定は面倒だけど、当たり判定のOnTriggerEnterと同じように、Update関数と入力システムが別になってコードがわかりやすくなったと思う。

今後こちらが標準になるので使っていきたい。

もしこの記事が役に立ったという方はコメントや下のハートマークをお願いします!

参考資料

https://docs.unity3d.com/Packages/com.unity.inputsystem@1.0/manual/QuickStartGuide.html

お知らせ

動画質問はYouTubeのメンバーシップのDiscord(音声とチャット)でも受け付けています。

YouTubeのコメントでは伝えにくい内容などがある場合はぜひ活用してみてください。

個人開発のサポートはオンラインサロンで受け付けています!

Unity

Posted by studioshimazu