InputSystem対応


投稿日:2024年7月31日 | 最終更新日:2024年10月13日

概要

Unityでは入力処理を扱う基本システムが、InputManagerという旧バージョンと、InputSystemという新バージョンがあります。
InputSystemはUnity公式の追加プラグインなのですが、最近はデフォルトで使用するようになっている場合が多いため、
宴4.1.2からInputSystem経由で入力処理ができるようにしました。

InputSystem関係のプログラムは、Assets/Utage/ExtensionSupport/InputSystemフォルダ以下にあります。

InputSystem対応は自動的に適用

プロジェクトにInputSystemパッケージが適用されている場合は、自動的にInputSystemを使用するよう設定されます。
プロジェクトにInputSystemがない場合は、従来通りInputManager経由で処理を行います。
自動的に切りかわるので、特に対応作業をする必要はないです。

InputUtilの抽象化

Utageでは、キーボー入力などのボタン入力処理は、「InputUtil」というstaticなWrapperクラスを経由して行っていいたのですが、
InputSystem対応をするにあたって、具体的な入力キーのメソッド名から、入力キー等を抽象化し入力の目的名のメソッドを使えるように変更しました。
もし、自作のキーボード入力処理などで、宴のInputUtil経由で処理を行っているものがあった場合は、警告がでますので警告メッセージにある代替メソッドに変更するようにしてください。
(一応そのままでも動作しますが、警告が残ったままになります)

        //強制スキップ入力があったか
        public static bool IsInputForceSkip()
        {
            if (!EnableInput) return false;
            return InputStrategy.IsInputForceSkip();
        }
        //UI入力を抽象化するため、メソッド名を変更
        [Obsolete("Use "+nameof(IsInputForceSkip) + " instead")]
        public static bool IsInputControl()
        {
            return IsInputForceSkip();
        }

自作のアクションマップなどで入力処理を変更したい場合

宴のInptuSystem対応のコード(Assets/Utage/ExtensionSupport/InputSystem/InputSystemStrategy.cs)は、具体的なキーやボタン入力を検知するようになっています。

自作のアクションマップなどを使って、入力処理を変えたい場合は
IInputStrategyを継承したクラスを作成して入力処理を実装し、
InputUtil.SetInputStrategy(); を使って、宴の使用する入力処理を上書きして書き換える形になります。

以下、サンプル

    //自作のアクションマップを使った入力処理を適用するサンプル
    //IInputStrategyを継承して、自作の入力処理を実装する
    public class SampleInputSystemStrategy :
        MonoBehaviour,
        IInputStrategy
    {
        public PlayerInput PlayerInput => playerInput;
        [SerializeField] PlayerInput playerInput;

        void Awake()
        {
            //InputUtil.SetInputStrategy()を使って、自作の入力処理を適用する
            InputUtil.SetInputStrategy(this);
        }

        public bool IsInputGuiClose()
        {
            //アクションマップを取得
            return PlayerInput.actions["GuiClose"].ReadValue<bool>();
        }