Brighthell96 Geschrieben 13. Januar 2021 Melden Share Geschrieben 13. Januar 2021 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: 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: 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Brighthell96 Geschrieben 14. Januar 2021 Autor Melden Share Geschrieben 14. Januar 2021 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. 1 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.