Es ist erwähnenswert, dass Ihr aktueller Code auf eine Marotte von Rigidbody.MovePosition()
aufgrund funktioniert nicht - seine Dokumentation es nicht erwähnt, aber für the 2D variant of the method, wird es erwähnt, dass
die Veränderung Ist-Position wird nur während des nächsten Physik-Updates auftreten. Wenn Sie diese Methode wiederholt aufrufen, ohne auf das nächste Physik-Update zu warten, wird der letzte Aufruf verwendet.
Obwohl also beide, wenn Aussagen würden eingegeben werden, wenn beide Tasten gedrückt werden, wird nur die MovePosition()
in der letzten Kraft treten soll.
Um dies anzugehen, wäre mein Vorschlag, einen kombinierten Bewegungsvektor zu berechnen, anstatt MovePosition()
sofort aufzurufen. Wenden Sie dann den Bewegungsvektor am Ende, so dass Sie nur jemals brauchen MovePosition()
einmal zu nennen:
Vector3 totalMovement = Vector3.zero;
if (Input.GetKey(KeyCode.W))
{
totalMovement += transform.forward;
}
if (Input.GetKey(KeyCode.A))
{
totalMovement -= transform.right;
}
// To ensure same speed on the diagonal, we ensure its magnitude here instead of earlier
player.MovePosition(transform.position + totalMovement.normalized * speed * Time.deltaTime);
hoffe, das hilft! Lass es mich wissen, wenn du irgendwelche Fragen hast.
Keine Notwendigkeit, es zu definieren, wenn Sie W und A drücken, dann werden beide 'if's angewandt und das Objekt wird sich diagonal bewegen. – Gusman
Nein. Es tut es nicht. –
Debuggen Sie den Code und verifizieren Sie, ob es auf beiden IFs eintritt, sollte es genug sein. – Gusman