Was ist der Unterschied zwischen transform.translate und Rigidbody.velocity?

7

Ich habe versucht zu verstehen, was der Unterschied zwischen diesen beiden Methoden zum Bewegen eines starren Körpers ist. Beide scheinen das Objekt mit einer konstanten Geschwindigkeit zu bewegen und beide arbeiten mit einem RigidBody. Was ist der Unterschied zwischen den beiden und wann sollte einer über den anderen verwendet werden?

Robert
quelle

Antworten:

15

transform.translatewird weder das Physiksystem verwenden (sucht beim Bewegen nicht nach Kollisionen, ignoriert aktuelle Geschwindigkeiten usw.), noch wird es notwendigerweise eine reibungslose Bewegung sein (da Sie so weit übersetzen können, wie Sie möchten). Dies setzt im Wesentlichen eine neue Position für das gesamte Objekt relativ zur aktuellen Position fest. Auf diese Weise sollten Sie Objekte verschieben, wenn Sie keine Physik verwenden möchten. Entweder weil das Objekt keine Physik hat oder weil Sie die Physik ignorieren möchten (wie das Teleportieren).

rigidbody.velocityverwendet das physikalische System und ist größtenteils glatt (mit Ausnahme extremer Geschwindigkeiten). Dies ist eher so, als würde man den Objekten sagen, in welche Richtung sie sich bewegen sollen, anstatt ihnen zu sagen, an welcher Position sie sich befinden. Die Bewegung hier wird die Physikwelt um sie herum betrachten. Wenn Sie eine Geschwindigkeit in Richtung einer festen Wand einstellen, versucht das Physiksystem, diese Bewegung auszuführen, und passt die Geschwindigkeit basierend auf der Kollision mit der Wand an. In vielen Fällen lassen Sie die Geschwindigkeit eher in Ruhe und passen stattdessen die Beschleunigung des Objekts an, wahrscheinlich durch Aufbringen einer Kraft.

MichaelHouse
quelle
1
Eine Sache , darauf hinzuweisen, dass mit einem Physik - Collider bewegen transform.translatekann manchmal schlechtere Leistung hat als mit einem Starrkörper & Geschwindigkeit, wie sie in dieser Frage & Antwort diskutiert . Für Objekte ohne Collider ist dies kein Problem.
DMGregory
3

Sie machen ziemlich unterschiedliche Dinge, können aber verwendet werden, um die gleichen Ergebnisse zu erzielen.

Durch Einstellen des Körpers velocitywerden Geschwindigkeit und Richtung festgelegt. Solange der Körper vom Physiksystem aktualisiert wird, wird seine Geschwindigkeit (effektiv) zu seiner Position addiert, um zu einer neuen Position für den Rahmen zu gelangen. Dies bewirkt, dass sich das Objekt im Laufe der Zeit mit konstanter Geschwindigkeit bewegt, bis Sie die Geschwindigkeit auf etwas anderes oder auf Null ändern.

Die TranslateMethode des TransformTyps passt die in der Transformationsmatrix des Körpers gespeicherte Übersetzung an, indem die bereitgestellte Übersetzung hinzugefügt wird. Dies bewirkt, dass sich das Objekt sofort an die neue Position bewegt und das physikalische System ignoriert. Dies führt nicht dazu, dass sich das Objekt im Laufe der Zeit bewegt, es sei denn, Sie rufen es ständig in jedem Frame auf.

Verwenden Sie diejenige, die für die gewünschte Semantik bei der Interaktion mit dem Objekt am sinnvollsten ist. Wenn Sie es nur einmal (oder gelegentlich) positionieren und dort belassen möchten, ist die Verwendung translatein Ordnung. Wenn Sie möchten, dass es sich ständig bewegt und gut mit anderen physischen Objekten interagiert, ist die Einstellung velocitywahrscheinlich insgesamt weniger arbeitsintensiv als die manuelle Übersetzung jedes Frames selbst.


quelle
0

Der Unterschied beginnt eine Rolle zu spielen, wenn Ihre starren Körper miteinander kollidieren.

Das Ändern der Transformation "teleportiert" das Objekt an einen anderen Ort, ohne ihm kinetische Energie zu geben. Es wird nicht mit Objekten auf dem Weg interagieren. Das Bewegen eines Objekts durch eine Geschwindigkeit bedeutet jedoch, dass andere Objekte aus dem Weg geschoben werden, wodurch die anderen Objekte beschleunigt und das Objekt selbst abgebremst werden.

Philipp
quelle