PlayerController und Blueprints

    • Offizieller Beitrag

    Ich Steuer meinen Charakter mit einem Mausklick links (Left Mouse Button) und er läuft zu einer bestimmten Position Position, alles wunderbar.

    So ist es im PlayerController eingestellt.


    Ich habe nun Blueprint, mit dem ich ein Menü ebenfalls mit Left Mouse Button öffne wenn man zusätzlich noch eine andere Taste drückt.

    Mit einem Boolean frag ich ab ob die Taste gedrückt ist oder nicht.


    Für mein Verständnis: Warum funktioniert das nicht, und wie bekomme ich das zum laufen ?

  • Ein beliebter Fehler dabei ist es, zwischen Input und dem Rest (hier das Set-Boolean) eine FlipFlop-Node gesetzt wird.


    Du kannst auch mal gucken: Innerhalb deiner Project Settings, bei Input, kannst du ja einmal die Tasten festlegen, und daneben sind ein paar Checkboxes, wo man z.B. festlegen kann, dass, damit es zum Input kommt, Shift oder Strg usw. zusätzlich gedrückt werden muss.

    Look behind you! A three-headed monkey!

    • Offizieller Beitrag

    Nochmal langsam:

    Kann das am Gate Liegen ?


    Die Steuerung des Character befindet sich ja im Player Controller



    Bei drücken der Taste B, setze ich den Boolean "Push B" auf True.


    Bei drücke der Linken Maustaste sollte dann dass funktionieren:


    Sobald ich aber Left Mouse Button anschließe funktioniert es nicht mehr mit Richt Mouse Button etc gehts.


    Wo sollte ich den dann den Flipflop einbauen ? Im PlayerController und dann via Custum Event in mein Blueprint ?


    Mich interessiert auch warum dass so nicht funktioniert.

  • Wo sollte ich den dann den Flipflop einbauen ? Im PlayerController und dann via Custum Event in mein Blueprint ?

    Ne, den sollst du eben nicht einfügen, dass ist ja gerde der Feheler den ich meinte. Aber das ja bei dir nicht der Fall.


    Ich würde mir mal den Controller BP angucken, während das Spiel läuft. Die Nodelines, welche benutzt werden, werden dann orange markiert, und bei der Node, wo dann am Ende keine Orangene Nodeline ist, sondern nur eine weiße, dann hast du schonmal die Node an der es liegt, siehe Debugging


    https://docs.unrealengine.com/…uide/Debugging/index.html

    Look behind you! A three-headed monkey!

  • Du hast an zwei verschiedenen Stellen die Abfrage auf den linken Mausbutton. Einmal wird der zusätzliche Druck auf Taste B mit abgefragt und einmal nicht. Sprich, dem Player Controller ist es eigentlich scheiß egal ob du B noch zusätzlich drückst, oder halt nicht. Da solltest du noch einen Branch einfügen, das er dort eigentlich nichts tun sollte wenn B zusätzlich gedrückt wurde. Also quasi wie bei deinem anderen BP nur halt die Abfrage auf B und dann die False-Linie verfolgen.

    • Offizieller Beitrag

    sprich, dem Player Controller ist es eigentlich scheiß egal ob du B noch zusätzlich drückst,

    Ja okay aber wieso funktioniert der Linksklick dann nicht ?


    Da solltest du noch einen Branch einfügen, das er dort eigentlich nichts tun sollte wenn B zusätzlich gedrückt wurde.

    In meinem Blueprint hab ich ja ein Branch der genau das tut. Siehe oben Bild 2.


    Ich würde mir mal den Controller BP angucken, während das Spiel läuft. Die Nodelines, welche benutzt werden, werden dann orange markiert, und bei der Node, wo dann am Ende keine Orangene Nodeline ist, sondern nur eine weiße, dann hast du schonmal die Node an der es liegt, siehe Debugging

    Sobald ich den Leftklick in meinem Blueprint (SIehe Abb. 2) anschließe, sind keine Nodelines mehr zu erkennen.

    Mach ich aber statt einem "Left mouse click" ein "right mouse click" funktioniert alles wie es soll.

    Es ist so als würde der Player Controller alle Left Mouse Clicks unterdrücken.

  • Vermeide es die gleichen Controls mehrfach zu nutzen. Das nennt man "Competing inputs", also "konkurierende Eingaben". Von daher solltest du nicht an mehreren Stellen die gleichen Tasten oder Mausbewegungen abfragen - es wird nur verwirrend.


    Best practice ist es GAR KEINE inputs direkt in Blueprints abzufragen sondern die Inputs in den project Settings -> Input zu definieren. Damit kannst du auch verschiedene Eingabegeräte orchestrieren, mach z.B. einen Input Action Mapping Namens "ActionTaste". Dann kannst du "Left Mousebutton", "Enter" und "X" auf dem Joypad angeben und in deinem Blueprint ActionTaste aufrufen und pressed/released verwenden. So ist es einfacher später mit sehr vielen EIngabegeräten zu arbeiten, wenn dein Spiel zum beispiel sowohl auf einer Konsole, auf einem handy und in Windows rauskommt.



    Beachte auch - ganz wichtig - ein Actor muß immer "Auto receive Input" auf enabled haben (Auf den richtigen Spieler) sofern er Eingaben empfangen soll. Alternativ kannst du den Node "Enable Input" verwenden.


    Dein eigentliches Problem kommt jetzt:


    Gibt es "Competing inputs", also mehrere Stellen wo inputs verarbeitet werden sollen dann hast du mit den Default Werten immer einen gewinner und alle anderen verlieren. Denn bei Input nodes siehst du das default setting wenn du einen einzelnen anklickst - da steht rechts in den Details immer ein haken bei "Consume Input". Sprich nach diesem Node ist der Input "weg", alle anderen werden ignoriert. Wenn mich nicht alles täuscht ist die Reihenfolge Actor-->PlayerController-->LevelBP.


    Du kannst den Consume input rausmachen und in allen 3 genannten gleichzeitig input verarbeiten und etwas auslösen - aber wie gesagt - das macht es sehr unübersichtlich.