Unreal の HP リバーブ G2 コントローラーHP Reverb G2 Controllers in Unreal

作業の開始Getting started

重要

HP Motion Controller プラグインにアクセスするには、unreal Engine 4.26 と OpenXR または SteamVR が必要です。 HP リバーブ G2 コントローラーを使用する必要があります。Unreal Engine 4.26 and either OpenXR or SteamVR is required to access the HP Motion Controller plugin you'll need to work with the HP Reverb G2 controllers.

HP Motion Controller プラグインを有効にしていますEnabling HP Motion Controller Plugin

相互作用プロファイルとコントローラーマッピングは、HP Motion Controller プラグインに含まれています。このプラグインは、コントローラーマッピングを Unreal の入力システムに公開するために有効にする必要があります。The interaction profile and controller mappings are in the HP Motion Controller plugin, which must be enabled to expose the controller mappings to Unreal’s input system.

OpenXRHPController プラグインを有効にする

既存の OpenXR アプリの移植Porting an existing OpenXR app

HP Mixed Reality コントローラーのコントローラーバインドがゲームに存在しない場合、OpenXR ランタイムは、既存のバインドをアクティブコントローラーに再マップしようとします。If no controller bindings exist in the game for the HP Mixed Reality Controller, the OpenXR runtime will attempt to remap the existing bindings to the active controller. この場合、ゲームには Oculus Touch バインドがあり、HP Mixed Reality コントローラーバインドはありません。In this case, the game has Oculus Touch bindings and no HP Mixed Reality Controller bindings.

コントローラーバインドが存在しない場合に既存のバインドを再マップする

イベントは依然として発生しますが、ゲームで適切なメニューボタンなどのコントローラー固有のバインドを使用する必要がある場合は、HP Mixed Reality 対話プロファイルを使用する必要があります。The events will still fire, but if the game needs to make use of controller specific bindings, like the right menu button, the HP Mixed Reality interaction profile must be used. アクションごとに複数のコントローラーバインドを指定して、さまざまなデバイスのサポートを強化することができます。Multiple controller bindings can be specified per action to better support different devices.

複数のコントローラーバインドの使用

入力アクションマッピングの追加Adding input action mappings

新しいアクションを定義し、[HP Mixed Reality Controller] セクションのいずれかのキー押下にマップします。Define a new action and map to one of the key presses in the HP Mixed Reality Controller section.

新しいアクションとマッピングの定義

HP リバーブ G2 コントローラーには、"つかみ軸" バインドを持つ軸マッピングで使用できるアナロググリップもあります。The HP Reverb G2 controller also has an analog grip, which can be used in the axis mappings with the “Squeeze Axis” binding. グリップボタンが完全に押されたときにアクションのマッピングに使用される、別のつかみバインドがあります。There is a separate Squeeze binding, which should be used for action mappings when the grip button is fully pressed.

つかみ軸のバインドの使用

入力イベントの追加Adding input events

ブループリントを右クリックし、入力システムから新しいアクション名を検索して、これらのアクションのイベントを追加します。Right click on a Blueprint and search for the new action names from the input system to add events for these actions. ここでは、ブループリントは、現在のボタンと軸の状態を出力する print 文字列を使用してイベントに応答しています。Here the Blueprint is responding to the events with a print string outputting the current button and axis state.

イベントに応答し、現在のボタンと軸の状態を出力するブループリント

入力の使用Using input

ゲームの入力プロジェクト設定では、同じアクションと軸のマッピングを C++ から使用できます。The same action and axis mappings in the game’s input project settings can be used from C++.

  1. ファイル/新しい C++ クラスを使用して新しい C++ クラスを作成します...Create a new C++ Class with File/New C++ Class...

新しい C++ クラスの作成

  1. ポーンを作成するCreate a pawn

ポーンの作成

  1. プロジェクトの Visual Studio ソリューションで、新しいポーンクラスを見つけて、それを入力用に構成します。In the project’s Visual Studio solution, find the new Pawn class and configure it for input.
  • まず、コンストラクターで、AutoPossessPlayer を最初のプレーヤーに設定して、入力をポーンにルーティングします。First, in the constructor, set AutoPossessPlayer to the first player to route input to the pawn.
AMyPawn::AMyPawn()
{
    PrimaryActorTick.bCanEverTick = true;

    AutoPossessPlayer = EAutoReceiveInput::Player0;
}
  • 次に、SetupPlayerInputComponent で、アクションと軸イベントをプロジェクトの入力設定のアクション名にバインドします。Then in SetupPlayerInputComponent, bind actions and axis events to the action names from the project’s input settings.
void AMyPawn::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
    Super::SetupPlayerInputComponent(PlayerInputComponent);

    PlayerInputComponent->BindAction("X_Button", IE_Pressed, this, &AMyPawn::XPressed);
    PlayerInputComponent->BindAction("L_GripAxis", this, &AMyPawn::LeftGripAxis);
}
  • クラスにコールバック関数を追加します。Add the callback functions to the class:
void AMyPawn::XPressed()
{
    UE_LOG(LogTemp, Log, TEXT("X Pressed"));
}

void AMyPawn::LeftGripAxis(float AxisValue)
{
    if(AxisValue != 0.0f) 
    {
        UE_LOG(LogTemp, Log, TEXT("Left Grip Axis Valule: %f"), AxisValue);
    }
}
  • 次のコールバック関数定義で、ポーンのヘッダーを更新します。Update the Pawn’s header with the callback function definitions:
private:
    void XPressed();
    void LeftGripAxis(float AxisValue);
  1. 新しいポーンでエディターを起動するには、Visual Studio からコンパイルします。Compile from Visual Studio to launch the editor with the new pawn. コンテンツブラウザーからポーンをゲームにドラッグアンドドロップすると、入力が押されたときにポーンがコールバックを実行するようになります。Drag and drop the pawn from the content browser into the game and the pawn will now execute the callbacks when input is pressed.

関連項目See also