VRPN 入力を使用する

VRPN デバイスから入力を取得するように nDisplay をセットアップする方法について説明します。

Choose your operating system:

Windows

macOS

Linux

VRPN ネットワークにデータを送信するように設定したモーション トラッカー、軸コントローラー、ボタン コントローラー、およびキーボードから nDisplay に入力イベントを送信できます。

nDisplay の VRPN を設定する

nDisplay で VRPN 入力デバイスを使用するには、次の手順を実行します。

  1. ネットワークに VRPN サーバーをインストールします。 このバージョンの nDisplay には、 バージョン 7.33 の VRPN が必要です。

  2. サーバーの 「vrpn.cfg」 ファイル (サーバーの実行ファイルの横にある) で、入力デバイスを有効にして名前を付けます。

  3. nDisplay コンフィギュレーション ファイルで、 input エントリを追加して VRPN 入力デバイスをセットアップします。

セットアップする必要のある入力デバイスの種類、およびそのデバイスの入力を Unreal Engine のプロジェクトに適用する方法に応じて、入力コンフィギュレーションで異なる設定を使用して、いくつかの追加手順を実行する必要がある場合があります。さまざまなタイプの入力デバイスに適用される詳細については、次のセクションを参照してください。

nDisplay コンフィギュレーション ファイルで設定できるすべての設定およびパラメータの詳細については、「 nDisplay コンフィギュレーション ファイルのリファレンスです。 」を参照してください。

VRPN トラッカーを nDisplay カメラまたはシーン ノードにマッピングする

VRPN トラッカー デバイスがある場合、現在の位置を nDisplay コンフィギュレーション ファイルでセットアップしたいずれかの nDisplay カメラまたはシーン ノードに直接マッピングできます。トラッカーを現実の空間で動かすと、そのカメラまたはシーン ノードの位置が、追従する仮想空間で自動的に更新されます。

nDisplay コンフィギュレーション ファイルでこれを実行するには、 input セクションおよび camera セクショを設定します。

次の例では、ART DTrack トラッキング システムを設定する 1 つの方法を示しています。

  • VRPN サーバー実行ファイルの横にある「 Vrpn.cfg 」で次の行を追加します。

    vrpn_Tracker_DTrack DTrack  5000

    この行の追加により、VRPN ではポート 5000 から DTrack 入力を受信し、DTrack という名前の VRPN デバイスにその入力をマッピングします (DTrack がポート 5000 でトラッキング データを出力するように設定されていることを確認してください)。

  • nDisplay コンフィグ ファイルで次の行を追加します。

    [input] id=CaveTracking type=tracker addr=DTrack@127.0.0.1 loc="X=1.32,Y=0,Z=0.93735" rot="P=0,Y=0,R=0" front=Z right=-X up=Y
    [camera] id=camera_dynamic loc="X=0,Y=0,Z=0" tracker_id=CaveTracking tracker_ch=0

    1 行目では、 CaveTracking という名前の nDisplay 入力デバイスを作成します。これは、VRPN アドレス DTrack@127.0.01 からデータを取得します。ここで座標系を調整して、トラッキング システムとオフセットに合わせる必要があります。2 行目の camera コンフィギュレーションでは、チャネル 0 CaveTracking 入力からカメラ位置を取得するように nDisplay に指示します。

キーボード イベントを反映する

キーボード デバイスがお使いの VRPN サーバー向けにセットアップされている場合、そのキーボードのイベント (キーを押したり、放したりするとき) が Unreal Engine のプロジェクトにどのように反映されるかを制御できます。キーボードのキーに UE4 の標準キーボード入力システムをトリガーさせたり、nDisplay が提供する新しいキーボード入力をキーにトリガーさせたり、これらの両方を実行させたり、あるいはどちらも実行させなかったりすることができます。

これを設定するには、次の 2 通りの方法を使用できます。

  • nDisplay コンフィギュレーション ファイルでこれを実行するには、次のようにキーボード デバイスを定義する input セクションの reflect オプションを設定します。

    [input] id=ControlKeyboard type=keyboard addr=Keyboard0@192.168.0.1 reflect=ue4
  • または、プロジェクトのブループリント コードでこれを実行するには、次のように Set VRPN Keyboard Reflection (Interface Call) 関数を呼び出します。 Keyboard reflection in Blueprint

この反映設定では、次のいずれかの値を受け入れます。

[input] 設定

ブループリントのオプション

説明

nDisplay

nDisplay buttons only (nDisplay ボタンのみ)

キーボード イベントは、nDisplay で作成される新しいキーボード入力イベントにルーティングされます。 [Input (入力)] >[N Display Keyboard Events (N ディスプレイ キーボード イベント)] カテゴリのノードを使用して、ブループリント スクリプトでこれらのイベントに応答できます。

ue4

Native UE4 keyboard events (ネイティブ UE4 キーボード イベント)

キーボード イベントは、Unreal Engine にビルトインされている入力システムを介してルーティングされます。アプリケーションで使用する InputController クラスでこれらのイベントに応答することも、 [Input (入力)] > [Keyboard Events (キーボード イベント)] カテゴリのノードを使用して、ブループリント スクリプトでこれらのイベントに応答することもできます。

both

Both nDisplay and UE4 native (nDisplay および UE4 ネイティブの両方)

キーボード イベントは、nDisplay キーボード処理システムと Unreal Engine にビルトインされた入力システムの両方を介してルーティングされます。上記のどちらの行で説明した方法でも、イベントに応答できます。

none

No reflection (反映なし)

キーボード イベントは、nDisplay キーボード処理システムまたはビルトインの入力システムを介してルーティングされません。 このオプションを使用する場合、次のいずれかが必要です。

  • [Display Cluster (ディスプレイ クラスタ)] > [Input (入力)] > Was VRPN Button Pressed または [Display Cluster (ディスプレイ クラスタ)] > [Input (入力)] > Was VRPN Button Released などの nDisplay ブループリント API のブループリント ノードを使用して特定のイベントをクエリする。 「デバイス入力をクエリする」 も参照してください。

  • UE4 で他の入力イベントに個々のキーをバインドする。詳細については、 「UE4 入力にデバイス チャネルをバインドする」 を参照してください。

キーボード デバイスの反映を設定すると、設定はそのデバイスのすべてのキーに適用されます。ただし、引き続き個々のキーを UE4 の他の入力イベントに再度バインドすることができます。詳細については、 「UE4 入力にデバイス チャネルをバインドする」 を参照してください。

UE4 入力にデバイス チャネルをバインドする

VRPN デバイスの特定のチャネルを Unreal Engine イベントとモーション ソースにバインドすることにより、プロジェクトを VRPN 入力デバイスに応答させることができます。これらのバインディングの作成は、次の 2 つのどちらかの方法で行います。

  • モーション ソースまたはイベントにバインドする各チャネルの nDisplay コンフィギュレーション ファイルで input_setup セクションを設定する。

  • 次のように nDisplay 入力モジュール API で使用可能な関数を使用する。 Bind VRPN device channel

例:トラッキング デバイスをモーション ソースにバインドする

VRPN モーション トラッキング デバイスを Unreal Engine の既存のモーション ソースにバインドできます。次に、そのモーション ソースを使用して、レベル内のアクタに割り当てる MotionControllerComponent を制御できます。

これを設定するには、次の手順を実行します。

  1. nDisplay コンフィギュレーション ファイルで、トラッカーを定義する input セクションを設定する必要があります。次に例を示します。

    [input] id=TestTrack type=tracker addr=Tracker0@127.0.0.1 loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" front=X right=Y up=Z
  2. また、追跡したいデバイスとチャネルを、入力を受け取りたいモーション ソースにバインドする必要があります。 コンフィギュレーション ファイルで input_source セクションを追加すると、これを実行できます。

    [input_setup] id=TestTrack ch=0 bind="Special_1"

    または、次のように Bind VRPN Tracker (Interface Call) 関数を呼び出し同じ値を設定すれば、プロジェクトのブループリント コードで実行することもできます。 Bind VRPN Tracker

例:アナログ デバイスをバインドする

アナログ VRPN デバイスでは、Unreal Engine のマウス入力またはサムスティック入力と同様に、0 〜 1 の範囲の入力値を提供します。

nDisplay には、アナログ VRPN デバイスをバインドできる 20 個の一連の汎用アナログ入力が含まれています。これらの汎用アナログ入力は、 [Input (入力)] >[N Display Events (N Display イベント)] カテゴリおよび [Input (入力)] >[N Display Values (N Display 値)] カテゴリにあります。

nDisplay generic analog events and values

VRPN デバイスを他の UE4 入力にバインドすることもできるので、これらの nDisplay アナログ入力を必ず使用する必要はありません。次の例では、その両方について示します。

これを設定するには、次の手順を実行します。

  1. nDisplay コンフィギュレーション ファイルで、アナログ デバイスを定義する input セクションを設定する必要があります。次に例を示します。

    [input] id=TestAxes type=analog addr=Mouse0@127.0.0.1
  2. また、追跡したいデバイスとチャネルを、入力を受け取りたいアナログ入力にバインドする必要があります。多くの場合、アナログ デバイスには 2 つのチャネルがあります。1 つは X 軸の入力用で、もう 1 つは Y 軸の入力用です。この場合、通常、2 つの軸を異なる nDisplay アナログ入力に個別にバインドします。 これを行うには、次のようにコンフィギュレーション ファイルに input_source セクションを 2 つ追加します。

    [input_setup] id=TestAxes ch=0 bind="nDisplay Analog 0"
    [input_setup] id=TestAxes ch=1 bind="Gamepad Left Thumbstick Y-Axis".

    または、次のように Bind VRPN Channel (Interface Call) 関数を呼び出して、同じ値を設定することで、プロジェクトのブループリント コードでも実行できます。 Bind VRPN Channel for analog device

  3. 入力イベントが発生したことを検出する必要がある場合、またはその軸に沿った入力の実際の値を取得する必要がある場合は、VRPN 軸チャネルをバインドした入力イベントを使用します。 例えば、この場合は、次の方法を使用します。

    • 最初の軸で、 [Input (入力)] >[N Display Events (N Display イベント)] > nDisplay Analog 0 を使用して、入力イベントに応答し、 [Input (入力)] >[N Display Values (N Display 値)] > nDisplay Analog 0 を使用して現在の軸の値を取得します。

    • 2 番目の軸で、 [Input (入力)] >[Gamepad Events (ゲームパッド イベント)] > Gamepad Left Thumbstick Y-Axis を使用して、入力イベントに応答し、 [Input (入力)] >[Gamepad Values (ゲームパッド値)] > Gamepad Left Thumbstick Y-Axis を使用して現在の軸の値を取得します。

例:ボタン デバイスのバインディング

ボタン VRPN デバイスでは、ボタンが押されるか放されるたびに、特定のチャンネルでイベントが開始されます。

nDisplay には、ボタン デバイスをバインドできる 20 個の一連の汎用ボタン イベント入力が含まれています。これらのボタン イベント入力は、 [Input (入力)] >[N Display Events (N Display イベント)] カテゴリにあります。

nDisplay generic button events

これらの nDisplay ボタン入力を使用する必要はありません。また、VRPN デバイスを他の UE4 入力にバインドすることもできます。次の例では、その両方について示します。

これを設定するには、次の手順を実行します。

  1. nDisplay コンフィギュレーション ファイルで、ボタン デバイスを定義する input セクションを設定する必要があります。次に例を示します。

    [input] id=TestBtn type=buttons addr=Mouse0@127.0.0.1
  2. また、追跡したいデバイスとチャネルを、入力を受け取りたいボタン入力にバインドする必要があります。 コンフィギュレーション ファイルで input_source セクションを追加すると、これを実行できます。

    [input_source] id=TestBtn ch=0 bind="nDisplay Button 0"
    [input_source] id=TestBtn ch=2 bind="Gamepad Face Button Top"

    または、次のように Bind VRPN Channel (Interface Call) 関数を呼び出して同じ値を設定することで、プロジェクトのブループリント コードでも実行できます。 Bind VRPN Channel for button device

  3. 入力イベントが発生したことを検出する必要がある場合は、VRPN ボタン チャネルをバインドした入力イベントを使用します。 例えば、この場合は、 [Event (イベント)] > [N Display Events (N Display イベント)] > nDisplay Button 0 ノードおよび [Event (イベント)] > [Gamepad Events (ゲームパッド イベント)] > Gamepad Face Button Top ノードを使用します。

例:キーボード デバイスのバインディング

前述の 「キーボード イベントを反映する」 で説明したように、VRPN キーボードの入力をビルトインの Unreal Engine キーボード入力にマッピングしたり、新しい nDisplay キーボード入力にマッピングしたり、その両方にマッピングしたり、どちらにもマッピングしないことができます。どのタイプの反映を設定するかを問わず、キーボードの個々のキーを他の Unreal Engine または nDisplay 入力イベントにバインドすることもできます。

これを設定するには、次の手順を実行します。

  1. nDisplay コンフィギュレーション ファイルで、キーボード デバイスを定義する input セクションを設定する必要があります。次に例を示します。

    [input] id=TestKb type=keyboard addr=Keyboard0@127.0.0.1
  2. また、追跡したいデバイスとキーを、キーにトリガーさせたい Unreal Engine の入力イベントにバインドする必要があります。 コンフィギュレーション ファイルで input_source セクションを追加すると、これを実行できます。

    [input_source] id=TestBtn key="Space Bar" bind="Gamepad Left Trigger"

    または、次のように Bind VRPN Keyboard (Interface Call) 関数を呼び出して、同じ値を設定することで、プロジェクトのブループリント コードでも実行できます。 Bind VRPN Keyboard

  3. 入力イベントが発生したことを検出する必要がある場合は、VRPN ボタン チャネルをバインドした入力イベントを使用します。 例えば、この場合は、 Event > Gamepad Events > Gamepad Left Trigger ノードを使用します。

デバイス入力をクエリする

入力イベントへのバインディングを利用するのではなく、VRPN デバイスに直接クエリすると現在の状態を確認できます。

  • C++ では、 IDisplayClusterInputManager クラスを使用します。

  • ブループリントで、 DisplayCluster > [Input (入力)] の下の nDisplay API の関数を使用します。これらのノードの [Device Id (デバイス ID)] および [Device Channel (デバイス チャネル)] に指定する入力値が、nDisplay コンフィギュレーション ファイルの input セクションでデバイスに設定した値と一致する必要があります。 次に例を示します。

キーボード ボタンとデバイス チャネル

VRPN キーボード入力は、基本的に特殊なタイプのボタン デバイスです。特定のキーボード ボタンが押されたかどうかをクエリする必要がある場合は、次のように Was VRPN Button Pressed (Interface Call) 関数を使用します。

Detecting whether a VRPN button was pressed

これを機能させるには、 [Device Channel (デバイス チャネル)] 入力をテストしたいボタンに VRPN によって割り当てられた数値 ID に設定する必要があります。

キーボードでテストしたいボタンに対応する [Device Channel (デバイス チャネル)] の数値 ID を決定するには、VRPN ディストリビューションで提供される vrpn_print_devices.exe アプリケーションを実行できます。このツールの実行中、キーボードで押したボタンの数値 ID がコンソールに出力されます。

例えば、スペースバーは次のようにキー番号 57 です。

Find the numeric ID of a keyboard button

Unreal Engine のドキュメントを改善するために協力をお願いします!どのような改善を望んでいるかご意見をお聞かせください。
調査に参加する
閉じる