Peanut Geschrieben 3. Juli 2020 Melden Share Geschrieben 3. Juli 2020 Hallo liebe Unity Inside Community ich habe einen Bug den ich mir nicht erklären kann. Also wenn ich den Input zum Dash gebe dasht mein Player manchmal und manchmal nicht. Ich habe jede Variable Debugt die im rb2d.Move verarbeitet wird und zu dem Punkt ist keine 0. Ich habe den Code auch in Update , FixedUpdate und Lateupdate probiert aber das Ergebniss ist das selbe. Hier der Code : if (Input.GetMouseButtonDown(1)&&dashIsReady) { float distance = Vector2.Distance(new Vector2(transform.position.x, transform.position.y), Camera.main.ScreenToWorldPoint(Input.mousePosition)); Vector2 playerPosition = new Vector2(this.transform.position.x, this.transform.position.y); Vector2 direction = playerMovement.getMousePositionInWorldDirection(); RaycastHit2D[] hit2D = Physics2D.RaycastAll(transform.position, -direction * distance); foreach (RaycastHit2D hit in hit2D) { if (hit.collider != null) { if (hit.collider.transform.gameObject.CompareTag("Enviroment")) { distance = Vector2.Distance(playerPosition, new Vector2(hit.transform.position.x, hit.transform.position.y) + direction); break; } else if (hit.collider.transform.gameObject.CompareTag("Enemy")) { hit.transform.gameObject.GetComponent<IDamage>().ApplyDamage(); } } } if (distance > maxDashDistance) { distance = maxDashDistance; } rb2d.MovePosition(playerPosition - direction * distance); dashIsReady = false; } Und hier ein Video das mein Problem etwas besser erklärt. In der Console kann man sehen das die Position manchmal beibehalten wird.Am besten sieht man es ab 10 Sekunden. Danke für die Hilfe 2020-07-03 18-55-35.mp4 Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Zer0Cool Geschrieben 3. Juli 2020 Melden Share Geschrieben 3. Juli 2020 Schwer zu erkennen, da ich den Inhalt einiger Variablen nicht kenne, normal sollten Input-Eingaben immer in der Update-Methode gemacht werden. Ansonsten bau doch mal ein Debug.Log ein und schau was bei dem Mausklick herauskommt: (siehe Scene-View) Vector2 moveToPos = playerPosition - direction * distance Debug.Log("Wir bewegen uns zu: " + moveToPos); Debug.DrawLine(new Vector3(playerPosition.x,playerPosition.y,transform.position.z) , new Vector3(moveToPos.x,moveToPos.y,transform.position.z), Color.red, 2.5f); rb2d.MovePosition(moveToPos); Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 3. Juli 2020 Melden Share Geschrieben 3. Juli 2020 "Mein Input wird manchmal nicht erkannt" klingt ganz stark nach Get(Button/Key/MouseButton)(Down/Up) in FixedUpdate. Denk dran, dass FixedUpdate mehrere Male oder kein Mal zwischen zwei Updates vorkommen kann und das Input immer in Update aktualisiert wird. Wenn du also den Knopf drückst und dann zwei FixedUpdates hast, dann ist GetKeyDown in FixedUpdate zweimal hintereinander true, weil es erst beim nächsten Update wieder false wird. Wenn du kein FixedUpdate zwischen dem Drück-Update und dem danach hast, in dem der Input wieder false wird, dann fällt der Input komplett flach. Daher: Down- und Up-Inputs in Update abfragen und bis zum nächsten FixedUpdate behalten; dann wieder auf false setzen. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Peanut Geschrieben 4. Juli 2020 Autor Melden Share Geschrieben 4. Juli 2020 Hier mal der gesamte Code : https://hastebin.com/bipiwotuli.cs So was ich nach etwas mehr Debugen gemerkt habe ist das die neue Position zwar neu berechnet wird aber Unity wohl manchmal zu langsam ist den Player zu bewegen . Also rb2d.MovePosition. Wenn ich die position mit transform.position ändere funktioniert alles. Jetzt noch meine Frage muss ich die position mit rb2d.MovePosition in fixedUpdate ändern oder geht das noch anders. Danke für die Hilfe Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 4. Juli 2020 Melden Share Geschrieben 4. Juli 2020 Joa, Physik und eigentlich alles, was nicht streng linear ist und immer überall konsistent passieren soll, sollte in (einem) FixedUpdate passieren. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Archiviert
Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.