UnityのStandalone Input Module【使い方とスクリプト】

component thumbnail

この記事はUnityのコンポーネントのStandalone Input Moduleについて解説した記事です。

<Standalone Input Moduleとは>

入力を受けとってイベントを送信するものです。

また、このコンポーネントはEventSystemとセットで使用され、InputManagerで設定された入力を見て各種イベントを送ります。

EventSystemとInputManagerの解説については↓の記事で解説していますので参考にしてください。

<Standalone Input Moduleの処理内容>

1. プラスマイナスを持つ軸入力があると選択されているオブジェクトにMoveイベントを送信します。

2. 送信(決定)、キャンセルボタンが押された時、選択されているオブジェクトに送信(決定)、キャンセルイベントを送信します。

3. マウス(スクリーンタップ)の入力を処理します

・PointerEnter イベントを送信します (ヒエラルキーに表示されていて、そのイベントを処理できるすべてのオブジェクトに送信されます)

・PointerPress イベントを送信します

・ドラッグハンドラー (それを処理できるヒエラルキーの最初の要素) をキャッシュします

・BeginDragイベントをドラッグハンドラーに送信します

・イベントシステムで ‘押下された’ オブジェクトを Selected (選択されたもの) として設定します

・移動を処理します

・DragEventをキャッシュされたドラッグハンドラーに送信します

・オブジェクト間でタッチ移動があればPointerEnter(オブジェクト外からオブクェクト内にカーソルを移動した場合)とPointerExit(オブジェクト内からオブジェクト外にカーソルを移動させた場合)のイベントを処理します

・PointerPress を取得したオブジェクトに PointerUp イベントを送信します

・ボタンを離した時のオブジェクトがボタンを押した時のオブジェクトと同じ時、PointerClick イベントを送信します

・キャッシュされたドラッグハンドラーがある場合は Drop イベントを送信します

・キャッシュしたドラッグハンドラーに EndDrag イベントを送信します

4. ホイールによるスクロールイベントを処理します。

<Standalone Input Moduleのインスペクター>

入力を設定します。Input Managerに設定されている名前を使用します。

standalone input module inspector
クリックすると展開します

Horizontal Axis

横軸の方向の入力です。Input Managerで設定されているボタンの名前を入力します。

Vertical Axis

縦軸の方向の入力です。Input Managerで設定されているボタンの名前を入力します。

Submit Button

送信(決定)の入力です。Input Managerで設定されているボタンの名前を入力します。

Cancel Button

キャンセルの入力です。Input Managerで設定されているボタンの名前を入力します。

Input Actions Per Second

1秒間に可能なキーボード、コントローラーの入力数です。

Repeat Delay

1秒毎の入力操作が繰り返されるまでの遅延時間 (秒単位)です。

Force Module Active

これにチェックを入れるとStandalone Input Moduleを強制的にオンにします。

スポンサーリンク

<Standalone Input Moduleのスクリプトの使い方>

名前空間UnityEngine.EventSystems
class
継承EventSystems.PointerInputModule

デフォルトの状態から使用するには

using UnityEngine.EventSystems;

と記述するか

UnityEngine.EventSystems.EventSystem

とする必要があります。

クリックすると展開します

cancelButton

キャンセルの入力です。

Input Managerで設定されているボタンの名前を指定します。

型 string型

○ 使い方
インスペクターから設定できるため、スクリプトから使うことはほぼないかと思います。エディタ拡張でStandaloneInputModuleを作成する時ぐらいかと思います。

//キャンセルボタンの名前を指定します。(Input Managerで設定したもの)
StandaloneInputModule sim = GetComponent<StandaloneInputModule>();
sim.cancelButton = "Cancel";

forceModuleActive

trueにするとStandalone Input Moduleを強制的にオンにします

型 bool型

○ 使い方
何らかの処理でインプットを切った時、強制的にオンにしたい場合に使用します。元もこうもありませんが、なるべくこれを使用しないプログラムを組んだ方が賢い気がします。

//StandaloneInputModuleを強制的にオンにします。
StandaloneInputModule sim = GetComponent<StandaloneInputModule>();
sim.forceModuleActive = true;

horizontalAxis

横軸の方向の入力です。

Input Managerで設定されているボタンの名前を指定します。

型 string型

○ 使い方
インスペクターから設定できるため、スクリプトから使うことはほぼないかと思います。エディタ拡張でStandaloneInputModuleを作成する時ぐらいかと思います。

//横軸の方向の入力の名前を指定します。(Input Managerで設定したもの)
StandaloneInputModule sim = GetComponent<StandaloneInputModule>();
sim.horizontalAxis = "Horizontal";

inputActionsPerSecond

1秒間に可能なキーボード、コントローラーの入力数です。

型 float型

○ 使い方
入力数を制限したい場合に使用します。連打や同時押しなどに対応します。何故かfloat型です。これはインスペクターで設定できるので、スクリプトから使うことはほぼないと思います。エディタ拡張でStandaloneInputModuleを作成する時ぐらいかと思います。

//入力を制限します。
StandaloneInputModule sim = GetComponent<StandaloneInputModule>();
sim.inputActionsPerSecond = 1.1f;

repeatDelay

1秒毎の入力操作が繰り返されるまでの遅延時間 (秒単位)です。

型 float型

○ 使い方
押しっぱなしにされている際、イベントを繰り返し送る時間を遅延させます。インスペクターから設定できるのでスクリプトから動的に変えることはほぼないと思います。エディタ拡張でStandaloneInputModuleを作成する時ぐらいかと思います。

//繰り返しの遅延時間を設定します。
StandaloneInputModule sim = GetComponent<StandaloneInputModule>();
sim.repeatDelay = 1.1f;

submitButton

送信(決定)の入力です。

Input Managerで設定されているボタンの名前を入力します。

型 string型

○ 使い方
インスペクターから設定できるため、スクリプトから使うことはほぼないかと思います。エディタ拡張でStandaloneInputModuleを作成する時ぐらいかと思います。

//決定ボタンの名前を指定します。(Input Managerで設定したもの)
StandaloneInputModule sim = GetComponent<StandaloneInputModule>();
sim.horizontalAxis = "Submit";

verticalAxis

縦軸の方向の入力です。

Input Managerで設定されているボタンの名前を入力します。

型 string型

○ 使い方
インスペクターから設定できるため、スクリプトから使うことはほぼないかと思います。エディタ拡張でStandaloneInputModuleを作成する時ぐらいかと思います。

//縦方向のボタンの名前を指定します。(Input Managerで設定したもの)
StandaloneInputModule sim = GetComponent<StandaloneInputModule>();
sim.verticalAxis = "Vertical";

ActivateModule

モジュールがアクティべートされたときに呼び出されます。

モジュールをアクティブにしたときにカスタマイズしたコードを実行したい場合は、オーバーライドしてください。

なし

戻り値(返り値)

なし

○ 使い方
StandaloneInputModuleを自分なりに改変したい場合に継承して使います。アクティベートを取得したい場合などに使用します。

//StandaloneInputModuleを継承した場合
public override void ActivateModule()
{
   base.ActivateModule();
   Debug.Log("アクティベートされた");
}

DeactivateModule

モジュールが非アクティブにされたときに呼び出されます。

モジュールを非アクティブにしたときにカスタマイズしたコードを実行したい場合は、オーバーライドしてください。

なし

戻り値(返り値)

なし

○ 使い方
StandaloneInputModuleを自分なりに改変したい場合に継承して使います。ディアクティベートを取得したい場合などに使用します。

//StandaloneInputModuleを継承した場合
public override void DeactivateModule()
{
   base.DeactivateModule();
   Debug.Log("ディアクティベートされた");
}

IsModuleSupported

モジュールがサポートされているかどうかを確認します。

スタンドアロンでアクティベートしたくないプラットフォーム固有のモジュール (例えば TouchInputModule) がある場合は、これをオーバーライドしてください。

なし

戻り値(返り値)

モジュールがサポートされているかどうか : bool型

○ 使い方
StandaloneInputModuleを自分なりに改変したい場合に継承して使います。例えば、プラットフォームごとに使用するインプットモジュールを変更したい場合などで使用します。

//StandaloneInputModuleを継承した場合
public override bool IsModuleSupported()
{
   base.IsModuleSupported();

   //このモジュールエディタ上でしかは使わないと決めた
#if UNITY_EDITOR
   return true;
#else
   return false;
#endif
}

Process

モジュールの現状況のチェックを行います。アップデート処理ごとに一度実行されます。カスタムする場合にはこれをオーバーライドください。

なし

戻り値(返り値)

なし

○ 使い方
StandaloneInputModuleを自分なりに改変したい場合に継承して使います。例えば、プラットフォームごとに使用するインプットモジュールを変更したい場合などで使用します。

//StandaloneInputModuleを継承した場合
public override void Process()
{
   base.Process();
   Debug.Log("モジュールの現状況のチェック");
}

ShouldActivateModule

モジュールをアクティベートするべきかどうか。カスタムする場合にはこれをオーバーライドください。

なし

戻り値(返り値)

なし

○ 使い方
StandaloneInputModuleを自分なりに改変したい場合に継承して使います。例えば、プラットフォームごとに使用するインプットモジュールを変更したい場合などで使用します。

//StandaloneInputModuleを継承した場合
public override bool ShouldActivateModule()
{
   if(アクティベートする条件)
   {
      return true;
   }
   else
   {
      return false;
   }
}

UpdateModule

モジュールの内部状態をアップデート。アクティベートされたモジュールに処理が送信される前に、すべてのモジュールに対して呼び出されます。

なし

戻り値(返り値)

なし

○ 使い方
StandaloneInputModuleを自分なりに改変したい場合に継承して使います。例えば、プラットフォームごとに使用するインプットモジュールを変更したい場合などで使用します。

//StandaloneInputModuleを継承した場合
public override void UpdateModule()
{
   base.UpdateModule();
   Debug.Log("処理が送信される前のしたい処理を記述します);
}

ProcessMouseEvent

すべてのさまざまなマウスイベントを反復処理します。

なし

マウスポインターのEventDataのID : int型

戻り値(返り値)

なし

○ 使い方
マウスイベントをもう一度処理したい時に使用します。例えばイベントに対して何らかの変更を加えた後でもう一度呼び出すといいと思います。継承で特定のイベント時に呼ばれる関数内に書くといいと思います。

//StandaloneInputModuleを継承した場合
public override void UpdateModule()
{
   base.UpdateModule();
   Debug.Log("処理が送信される前のしたい処理を記述します);
   //色々変更した後にもう一度処理し直します。
   ProcessMouseEvent();
}

ProcessMousePress

このフレームのマウスボタンの状態を変更します。

変更したマウスボタンのイベントデータ : EventSystems.PointerInputModule.MouseButtonEventData型

戻り値(返り値)

なし

○ 使い方
マウスボタンの状態を強制的に変更したい場合に使用します。

//StandaloneInputModuleを継承している場合
MouseState m = GetMousePointerEventData();
ProcessMousePress(m.GetButtonState(PointerEventData.InputButton.Right).eventData);

ProcessTouchPress

このフレームのタッチの状態を変更します。

1. タッチイベントの送信先オブジェクトに渡す位置やIDなど、タッチイベントに関連するイベントデータ。 : EventSystems.PointerEventData型
2. タッチイベントが発生(押された)した瞬間かどうか : bool型
3. タッチイベントが解放(指を離した)した瞬間かどうか : bool型

戻り値(返り値)

なし

○ 使い方
このフレームのタッチの状態を強制的に変更したい場合に使用します。

//StandaloneInputModuleを継承している場合
EventSystem ev = EventSystem.current;
PointerEventData p = new PointerEventData(ev);
p.position = new Vector2(1.1f, 1.1f); //マウスの押した位置を強制的に変えます、
ProcessTouchPress(p,true,false);

SendMoveEventToSelectedObject

現在選択されているオブジェクトに move イベントを送信します。

なし

戻り値(返り値)

成功したかどうか(現在選択されているオブジェクトがないと失敗) : bool型

○ 使い方
選択しているオブジェクトが動いているものとして扱いたい場合に使用します。

//StandaloneInputModuleを継承している場合
if(SendMoveEventToSelectedObject())
{
   Debug.Log("選択しているオブジェクトは動いているものとして扱われる");
}

SendSubmitEventToSelectedObject

現在選択されているオブジェクトに送信(決定)イベントを送信します。

なし

戻り値(返り値)

成功したかどうか(現在選択されているオブジェクトがないと失敗) : bool型

○ 使い方
選択しているオブジェクトに対して決定のイベントを送りたい場合に使用します。

//StandaloneInputModuleを継承している場合
if(SendSubmitEventToSelectedObject())
{
   Debug.Log("選択しているオブジェクトに対して決定のイベントを送りました");
}

SendUpdateEventToSelectedObject

現在選択されているオブジェクトに更新イベントを送信します。

なし

戻り値(返り値)

成功したかどうか(現在選択されているオブジェクトがないと失敗) : bool型

○ 使い方
選択しているオブジェクトに対して更新のイベントを送りたい場合に使用します。

//StandaloneInputModuleを継承している場合
if(SendUpdateEventToSelectedObject())
{
   Debug.Log("選択しているオブジェクトに更新のイベントを送った");
}


タイトルとURLをコピーしました