Jump to content
Unity Insider Forum

Trotz Input wird der Player nicht bewegt.


Peanut

Recommended Posts

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 :D

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

"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

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 :D

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...