Controller di HP Reverb G2 in UnrealHP Reverb G2 Controllers in Unreal

IntroduzioneGetting started

Importante

Unreal Engine 4,26 e OpenXR o SteamVR sono necessari per accedere al plug-in HP Motion controller, è necessario usare i controller di HP Reverb 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.

Abilitazione del plug-in HP Motion controllerEnabling HP Motion Controller Plugin

Il profilo di interazione e i mapping del controller si trovano nel plug-in HP Motion controller, che deve essere abilitato per esporre i mapping del controller al sistema di input 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.

Abilitazione del plug-in OpenXRHPController

Porting di un'app OpenXR esistentePorting an existing OpenXR app

Se nel gioco non sono presenti associazioni controller per il controller di realtà misto HP, il runtime di OpenXR tenterà di rimappare i binding esistenti al controller attivo.If no controller bindings exist in the game for the HP Mixed Reality Controller, the OpenXR runtime will try to remap existing bindings to the active controller. In questo caso, il gioco ha binding Oculus touch e nessun binding del controller di realtà mista di HP.In this case, the game has Oculus Touch bindings and no HP Mixed Reality Controller bindings.

Modifica del mapping delle associazioni esistenti quando non esistono associazioni controller

Gli eventi verranno comunque attivati, ma se il gioco deve usare binding specifici del controller, ad esempio il pulsante di menu destro, è necessario usare il profilo di interazione con la realtà di HP mixed.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. È possibile specificare più associazioni controller per azione per supportare al meglio dispositivi diversi.Multiple controller bindings can be specified per action to better support different devices.

Uso di più associazioni controller

Aggiunta di mapping di azioni di inputAdding input action mappings

Definire una nuova azione ed eseguire il mapping a una delle pressioni dei tasti nella sezione HP Mixed Reality controller.Define a new action and map to one of the key presses in the HP Mixed Reality Controller section.

Definizione di nuove azioni e mapping

Il controller di HP Reverb G2 dispone anche di un grip analogico, che può essere usato nei mapping degli assi con il binding "Squeeze Axis".The HP Reverb G2 controller also has an analog grip, which can be used in the axis mappings with the “Squeeze Axis” binding. È disponibile un'associazione di compressione separata, che deve essere usata per i mapping delle azioni quando il pulsante grip è premuto completamente.There's a separate Squeeze binding, which should be used for action mappings when the grip button is fully pressed.

Utilizzo delle associazioni dell'asse squeeze

Aggiunta di eventi di inputAdding input events

Fare clic con il pulsante destro del mouse su un progetto e cercare i nuovi nomi di azione del sistema di input per aggiungere gli eventi per queste azioni.Right-click on a Blueprint and search for the new action names from the input system to add events for these actions. Il progetto sta rispondendo agli eventi con una stringa di stampa che visualizza lo stato corrente del pulsante e dell'asse.Here the Blueprint is responding to the events with a print string outputting the current button and axis state.

Progetto che risponde agli eventi e output dello stato corrente del pulsante e dell'asse

Uso dell'inputUsing input

Gli stessi mapping di azione e asse nelle impostazioni del progetto di input del gioco possono essere usati da C++.The same action and axis mappings in the game’s input project settings can be used from C++.

  1. Crea una nuova classe C++ con file/nuova classe C++...Create a new C++ Class with File/New C++ Class...

Creazione di una nuova classe C++

  1. Creare un PawnCreate a pawn

Creazione di un Pawn

  1. Nella soluzione Visual Studio del progetto individuare la nuova classe Pawn e configurarla per l'input.In the project’s Visual Studio solution, find the new Pawn class and configure it for input.
  • Per prima cosa, nel costruttore impostare AutoPossessPlayer sul primo giocatore per indirizzare l'input al pedone.First, in the constructor, set AutoPossessPlayer to the first player to route input to the pawn.
AMyPawn::AMyPawn()
{
    PrimaryActorTick.bCanEverTick = true;

    AutoPossessPlayer = EAutoReceiveInput::Player0;
}
  • In SetupPlayerInputComponent associare quindi gli eventi Action e AXIS ai nomi di azione dalle impostazioni di input del progetto.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);
}
  • Aggiungere le funzioni di callback alla classe: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);
    }
}
  • Aggiornare l'intestazione del Pawn con le definizioni della funzione di callback:Update the Pawn’s header with the callback function definitions:
private:
    void XPressed();
    void LeftGripAxis(float AxisValue);
  1. Compilare da Visual Studio per avviare l'editor con il nuovo pedone.Compile from Visual Studio to launch the editor with the new pawn. Trascinare il pedone dal browser contenuto al gioco e il pedone eseguirà i callback quando viene premuto l'input.Drag and drop the pawn from the content browser into the game and the pawn will now execute the callbacks when input is pressed.

Vedere ancheSee also