Aktuell gedrückt Taste herausfinden

  • Hi,


    ich bin gerade dabei ein remapping meiner Keyboardevents zu gestalten.
    Das Problem auch das ich stoße ist folgendes:


    Allerdings habe ich keinen Schimmer wie ich nun herausfinden soll, welche Taste genau gerade gedrückt wird.


    Ich könnte natürlich hergehen und eine Funktion schreiben, die mit sagt welche Taste gerade gedrückt wird über IsInPutKeyDown.
    Damit wäre ich vermutlich aber eher unzufrieden.
    Sofern es aber keine andere Lösung dafür gibt, werde ich das wohl so machen müssen.


    Also wenn jemand dazu eine Idee hat - immer her damit :D

  • Was ich genau machen will, ist die Tastenbelegung von Funktionen ändern.
    Da es scheinbar nicht funktioniert, so hab ich es jedenfalls interpretiert, die Tastenbelegung die man im Editor festgelegt hat zur Laufzeit zu ändern,
    hab ich mir gedacht, dass das auch anders lösbar wäre.


    Ich hab als Test mir eine Camera geschnappt, die ich so bewegen lassen kann - das funktioniert auch mit der Belegung die ich mir zusammengebastelt habe.


    Das habe ich bereits:


    Das Remapping hatte ich mir so vorgestellt

    Code
    Keyboard.CameraMoveRight = GetLastPressedKey();


    Die Frage ist, gibt es bereits so etwas und ich bin nur zu blind das zu finden
    oder ich darf mir die Funktion selbst schreiben
    In etwa so:

    Code
    TSharedPtr<FKeyDetails> ALemonPawn::GetLastPressedKey()
    {
        if (PC->WasInputKeyJustPressed(EKeys::BackSpace))
            return EKeys::GetKeyDetails(EKeys::BackSpace);
    }


    Das ist natürlich gerade alles recht provisorisch, aber irgendwie muss ich das ja herausfinden D:

  • Ok, in C++ muss ich passen (Edit: ich hätte mal auf Unterforum schauen sollen ;) ). In der UE4 Doku schon gesucht oder mal im UE4 Forum? Gerade bei letzterem findet man oft nützliches, wenn es nicht schon in der Doku steht.


    So wie ich das verstehe sind das ja eigentlich absolut Input Grundfunktionen einer Engine.

  • Ich bin mir nicht sicher, ob ich dich richtig verstehe. Der richtige Ansatz wäre es, "Aktionen" für die Dinge festzulegen, die du tun willst. Diesen Aktionen kannst du dann einer oder mehrere Tasten zuweisen (im Editor oder per C++).


    Im Bezug auf C++:


    1) Aktion an Methode binden
    Sobald ein Pawn von einem Controller übernommen wird, wird "SetupPlayerInputComponent" aufgerufen. Diese Methode wird mit einem Parameter vom Typ UInputComponent* aufgerufen. Damit kann man folgendermaßen Aktionen an Funktionen binden:


    Code
    InputComponent->BindAction("Jump", IE_Pressed, this, &ACharacter::Jump);


    2) Taste an Methode binden
    Um eine Taste direkt einer Methode zuzuweisen existiert folgende Methode:


    Code
    InputComponent->BindKey(EKeys::SpaceBar, IE_Pressed, this, &AMyCharacter::Jump);


    Dabei ist zu beachten: InputComponent ist ein Attribut von Pawn, existiert also nicht nur in SetupPlayerInputComponent. Wann genau es erlaubt ist dieses Objekt herzunehmen kann ich leider nicht sagen.


    3) Taste an Aktion binden
    Um einer Taste eine Aktion zuzuweisen geht folgendes (siehe UT Source Code):


    Code
    UInputSettings* InputSettings = UInputSettings::StaticClass()->GetDefaultObject<UInputSettings>();
    FInputActionKeyMapping keyMapping(TEXT("Jump"), EKeys::V);
    InputSettings->AddActionMapping(keyMapping);