【Input System】Processors~端数処理・反転・正規化など出力数値の変更~【Unity】

Input System サムネ

Unityの入力システム「 Input System」で使用するInput Actionのオプション項目「Processor」の解説とデフォルトの機能、及び自作する方法を解説します。

Processorとは

ProcessorsはInputActionを設定する際のオプション項目の一つで、「ベクトルの正規化(単位ベクトル化)」、「0、1付近の端数を0,1に変更」「+-符号を逆転化」等の数値を変更します。入力デバイスから届いた値は、ここで数値を変更して最終的に出力します。

Unity InputSystem Processor

Axis Deadzone

0、1、-1の近似値を丸めます。入力デバイスで押してない状態が誤作動でちょっとだけ押していて0、01などのような誤差を押したことにするための処置です。

Operand Type : float

Unity InputSystem Processor Deadzone

値が絶対値でminより小さい場合は丸めて0にし、maxよりも高い場合は丸めて1,-1にします。

Clamp

値をクランプします。

Operand Type : float

値がMinより小さい場合はMinを値がMaxより大きい場合はMaxにして返します。

Invert

float値を反転させます。

Operand Type : float

値が-の場合は+になり、+の場合は-になります。

Invert Vector2

Vector2を反転させます。

Operand Type : Vector2

Unity InputSystem Processor Inverd Vector2

Invert Xにチェックが入っている場合、X軸の値が-の場合は+になり、+の場合は-になります。

Invert Yにチェックが入っている場合、Y軸の値が-の場合は+になり、+の場合は-になります。

Invert Vector3

Vector3を反転させます。

Operand Type : Vector3

Unity InputSystem Processor Inverd Vector3

Invert Xにチェックが入っている場合、X軸の値が-の場合は+になり、+の場合は-になります。

Invert Yにチェックが入っている場合、Y軸の値が-の場合は+になり、+の場合は-になります。

Invert Zにチェックが入っている場合、Z軸の値が-の場合は+になり、+の場合は-になります。

Normalize

正規化します。

Operand Type : float

Unity InputSystem Processor Normalize

Min:最小値 Max:最大値 Zero:中心値

以下の計算はZero < Minの時、Zero = Minと置き換えた上で行います

  • 値 = Min、且つMin >= Zeroの場合、0f
  • 値 = Min、且つMin < Zeroの場合、-1f
  • Min < Zeroの場合、2 × (値 – Min) / (Max – Min) – 1
  • 上記以外の場合、(値 – Min) / (Max – Min)

Normalize Vector2

Vector2を正規化します。

Operand Type : Vector2

値を単位ベクトルに変換します。value.normalizedと同じことをしています。

Normalize Vector3

Vector3を正規化します。

Operand Type : Vector3

値を単位ベクトルに変換します。value.normalizedと同じことをしています。

Scale

値に倍率を掛けます。

Operand Type : float

Unity InputSystem Processor Scale

値にFactorを掛けます。

Scale Vector2

Vector2に倍率をかけます。

Operand Type : Vector2

Unity InputSystem Processor Scale Vector2

(a,b)のaにx倍、bにY倍を掛けます。

Scale Vector3

Vector3に倍率をかけます。

Operand Type : Vector3

Unity InputSystem Processor Scale Vector3

(a,b,c)のaにx倍、bにY倍、cにZ倍を掛けます。

Stick deadzone

0、1、-1の近似値を丸めます。入力デバイスで押してない状態が誤作動でちょっとだけ押していて0、01などのような誤差を押したことにするための処置です。

Operand Type : stick

Unity InputSystem Processor Stick Deadzone

値が絶対値でminより小さい場合は丸めて0にし、maxよりも高い場合は丸めて1,-1にします。

自作Processorを追加する

Processorは、自作して追加することがで簡単にできます。以下は、入力デバイスの値に指定数を足して出力するプロセッサーです。

using UnityEngine;
using UnityEngine.InputSystem;
#if UNITY_EDITOR
using UnityEditor;
#endif

#if UNITY_EDITOR
[InitializeOnLoad]
#endif
public class MyProcessor : InputProcessor<float>
{
#if UNITY_EDITOR
    static MyProcessor()
    {
        Initialize();
    }
#endif

    [RuntimeInitializeOnLoadMethod]
    static void Initialize()
    {
        InputSystem.RegisterProcessor<MyProcessor>();
    }

    [Tooltip("入力デバイスの値にこの値を足します。")]
    public float valuePlus = 1;

    public override float Process(float value, InputControl control)
    {
        return value + valuePlus;
    }
}
Unity InputSystem 自作Processor1

Processors横の+にMy が追加され、選択すると独自のプロセッサーが選択できます。では、順番に見ていきます。

public class MyProcessor : InputProcessor<float>

自作プロセッサーはInputProcessorを継承します。タイトルは「~Processor」にすると、InputActionは~の部分をタイトルにします。型を指定することで、その型のOperand Systemにしか対応しないことを明示します。

今回の場合はButtonはFloat型のため、ButtonのProcessor選択欄では追加できますが、他の形式Vector2などではそもそも項目が現れません。

[InitializeOnLoad]
~
    static MyProcessor()
    {
        Initialize();
    }

    [RuntimeInitializeOnLoadMethod]
    static void Initialize()
    {
        InputSystem.RegisterProcessor<MyProcessor>();
    }

自作プロセッサーをInput Systemに登録しています。InitializeOnLoadを利用することにより、エディタ起動時に処理が走ります。

    [Tooltip("入力デバイスの値にこの値を足します。")]
public float valuePlus = 1;

変数はPublicやシリアライズしたPrivateなどはInspector入力項目に追加されます。

    public override float Process(float value, InputControl control)
{
return value + valuePlus;
}

オーバーライドしたProcessメソッドにて、実際の値変換処理を行います。戻り値とvalueの型は、クラス宣言時の型と同じにします。

関連リンク

参考 【Unity】Input Systemの紹介と解説 トップページゲーム開発65535 Ver2 参考 【Unity】Input Systemの紹介ゲーム開発65535 Ver2 参考 【Unity】Input Systemの基本的な使い方ゲーム開発65535 Ver2

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です