Ich habe ein neues Spiel gestartet, für das keine Maus erforderlich ist, sodass die Bewegung der Tastatur überlassen bleibt. Ich habe versucht, 8 Richtungen zu integrieren; hoch, links, rechts, hoch rechts und so weiter. Wenn ich jedoch mehr als eine Pfeiltaste drücke, stapelt sich die Bewegungsgeschwindigkeit ( http://gfycat.com/CircularBewitchedBarebirdbat ). Wie könnte ich dem entgegenwirken?
Hier ist ein relevanter Teil meines Codes:
var speed : int = 5;
function Update () {
if (Input.GetKey(KeyCode.UpArrow)) {
transform.Translate(Vector3.forward * speed * Time.deltaTime);
} else if (Input.GetKey(KeyCode.UpArrow) && Input.GetKey(KeyCode.RightArrow)) {
transform.Translate(Vector3.forward * speed * Time.deltaTime);
} else if (Input.GetKey(KeyCode.UpArrow) && Input.GetKey(KeyCode.LeftArrow)) {
transform.rotation = Quaternion.AngleAxis(315, Vector3.up);
}
if (Input.GetKey(KeyCode.DownArrow)) {
transform.Translate(Vector3.forward * speed * Time.deltaTime);
}
}
unity
javascript
movement
eren_tetik
quelle
quelle
Antworten:
Trennen Sie Ihren Richtungsauswahlcode vom tatsächlichen Bewegungscode.
Direction
indem Sie prüfen, welche Tasten gedrückt werden. Speichern Sie es als Einheitsvektor (normalisiert).Direction
mitSpeed
und mitDeltaTime
.quelle
Sie müssen die Summe der Richtungen nehmen, diese normalisieren und dann mit der Geschwindigkeit multiplizieren.
Dies beantwortete ich tangential als Teil meiner Reaktion auf die Verhinderung diagonaler Bewegungen
Speziell:
quelle
Der "normalisierte Richtungsvektor" ist, wie diese Aufgabe normalerweise angegangen wird und wie oft ich es mache, aber in letzter Zeit habe ich einfach den resultierenden Bewegungsvektor geklemmt. In der Regel wird das gleiche Endergebnis erzielt, und der Code ist viel einfacher:
Einfacherer Code ist fast immer besser: E
quelle
ClampMagnitude
es, ist es nicht derselbe Code wieNormalize * Constant
in disquise?moveSpeed
nach dem Klemmen mit multiplizieren und möglicherweise mit der Multiplikation mit zusammenführendeltaTime
.