Jump to content
Unity Insider Forum

Input Action reagiert nicht mehr nach context.performed


Recommended Posts

Ich habe wiedermal meine Probleme mit dem (neuen) Inputsystem wofür ich leider online keine Lösung finde. Also im ernst ich bin aktuell am überlegen das Inputsystem wieder zu wechseln. Weil fürs alte gibt es genügend spezifische Tutorials und Hilfestellungen.

Und zwar bin ich aktuell an einem 2D Platformer am arbeiten. Da ich meine Jump performence ein wenig aufpolieren wollte habe ich mir ein paar Tutorials auf YT angeguckt und bin dann bei dem hier: 

hängen geblieben da mir das Konzept sehr gut gefällt. Nun.. leider benutzt er in seinem Video das alte InputSystem und dadurch kann ich das nicht alles so übernehmen wie ich es gern hätte. Um genau zu sein geht es um diese Stelle:

if(rb.velocity.y < 0) {
  	rb.velocity += Vector2.up * Physics2D.gravity.y * (fallMultiplier - 1) * Time.deltaTime;
} else if (rb.velocity.y > 0 && !Input.GetButton("Jump")) {
	rb.velocity += Vector2.up * Physics2D.gravity.y * (lowJumpMutliplier - 1) * Time.deltaTime;
}

die ich versuche in meinem Projekt einzufügen. Es geht praktisch darum dass wenn man im laufe eines Jumps nicht mehr die Taste zum Springen drückt wird der Jump frühzeitig abgebrochen was einen High-Jump simuliert wenn man die Taste gedrückt hält.

 

Nun aber zu meinem Setup:

Unbenannt.PNG.5065f2655e55b1e58b68eb0d09a519fa.PNG

Wie ihr sehen könnt habe ich eine Action "Jump" mit der "Hold"-Interaction. Dies sollte es mir eigentlich ermöglichen in Folgender Funktion:

public void OnJump(InputAction.CallbackContext context) {
        if (context.started && canMove && isGrounded && !PauseMenu.gameIsPaused && !isDead) {
            Debug.Log(context.phase);
            rb.velocity = new Vector2(rb.velocity.x, playerData.jumpForce * Time.deltaTime);
        }
        else if(context.canceled && canMove && !PauseMenu.gameIsPaused && !isDead) {
            Debug.Log(context.phase);
            rb.velocity += Vector2.up * Physics2D.gravity.y * (15f - 1) * Time.deltaTime;
        }
        else if (context.performed && canMove && !PauseMenu.gameIsPaused && !isDead) {
            Debug.Log(context.phase);
        }
    }

welche vom folgenden Interface vererbt  wird:

public class Player : MonoBehaviour, InputManager.IPlayerActions 

die Methoden zu nutzen:

context.started //Wenn Taste gedrückt wird.
context.performed //Wenn die "Hold"-Duration von 0.4 sekunden erfüllt wird.
context.canceled // Wenn die Taste released wird bevor "performed"erfüllt ist.

performed brauche ich in dem Fall nicht. Ich hab nur testweise mal performed Debugged um zu gucken ob es überhaupt ausgeführt wird.

 

So und jetzt zum eigentlichen Problem. Alle 3 States scheinen soweit zu funktionieren. Drücke ich die Taste kommt "started" durch das Debug.Log. Lasse ich sie frühzeitig los kommt "canceled". Lasse ich sie für 0.4 sekunden gedrückt kommt "performed" wie man hier sehen kann:

Unbenannt1.thumb.PNG.ad5202f13e337281dd35ea21d7fb5868.PNG

allerdings hab ich nun das weirde Behavior dass die Komplette Aktion "Jump" egal welchen Button, welche Taste ich drücke komplett deaktiviert wird nachdem auch nur 1x die Phase "performed" erfüllt wird. Das bedeutet ich kann ab da nicht mehr Jumpen. Er führt die OnJump Methode scheinbar nicht mehr aus.

Aber warum passiert das ? Muss ich die Phase "performed" irgendwie manuell zurücksetzen? oder hab ich evtl die komplett falsche herangehensweise gewählt? Ich bin leider total überfragt. 

vielen Dank im vorraus

LG Marc

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich habe meinen Fehler dank dieser Seite hier: https://forum.unity.com/threads/learning-new-inputsystem-when-and-how-is-the-cancelled-callback-used.969501/ endlich funden. Mein Fehler war scheinbar dass ich statt Action Type: "Button" den Action Type: "Pass Through" verwenden musste. ich verstehe nicht so ganz warum aber scheinbar resettet "performed" nicht wenn man Button als action type hat. bei "Pass Through" schon. Aber damit dass passiert muss man statt "Hold" bei Pass Through wohl für den selben Effekt "Slow Tap" benutzen (Siehe Bild).

ich werd niemals schlau aus dem Inputsystem... x.x

Wollte jedenfalls trotzdem antworten für den Fall der Fälle das das Problem wieder jemand haben sollte.

 

Unbenannt.PNG

Link zu diesem Kommentar
Auf anderen Seiten teilen

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Lädt...
×
×
  • Neu erstellen...