Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

06.08.2014, 15:56

Drehmoment, Beschleunigung, Geschwindigkeit? (Unity WheelCollider.motorTorque)

Hallo,

In Unity 3D gibt es die Komponente WheelCollider. Diese hat u.a. die Eigenschaft motorTorque (= Drehmoment).
Wie kann ich auf diese Weise eine möglichst richtige Beschleunigung programmieren?

Mit richtig meine ich z.B. v = a * t, daraus könnte man z.B.

Quellcode

1
transform.position.x = transform.position.x + Time.deltaTime * acceleration;

basteln.
So kann ich z.b. meinem Objekt eine konkrete beschleunigung von z.B. 20 Units / Sekunde geben, indem ich acceleration = 20f setze.
Ich möchte in meinem Spiel jetzt auch sagen können, das Fahrzeug hat eine Beschleunigung von acceleration. Wie setze ich das korrekt mit motorTorque um?

MfG,
Bigabig

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

2

06.08.2014, 16:09

Das kommt ein wenig darauf an, wie genau die Berechnungen des WheelColliders durchgeführt werden (Reibung -> Physikmaterialien, Anstieg/Gefälle des Untergrunds, Gewicht (Beladung) des Fahrzeugs (?), ...).
Grundsätzlich: der Collider (oder eher das Rad, welches von diesem Dargestellt wird) hat einen gewissen Durchmesser. Wenn die Rotation des Colliders perfekt in die Bewegung vorwärts umgesetzt wird, dann ist die zurückgelegte Strecke je Umdrehung (Umfang des Kreises) anhand des Radius ermittelbar. Ohne gegenwirkende Kräfte kann man damit bereits die Kraft (das Drehmoment) errechnen, welches notwendig ist, um das Rad ausreichen zu beschleunigen, damit das Fahrzeug (?) die gewünschte Beschleunigung erreicht.
Allerdings besteht an dieser Stelle die Frage, ob du ausnahmslos immer die gleiche Beschleunigung haben willst oder ob die Beschleunigung auch abhängig von bereits genannten Gegenkräften sein soll. Im ersten Fall wäre es vielleicht sinnvoller, die Bewegung nicht physikalisch korrekt zu handhaben und anhand der Geschwindigkeit des Fahrzeugs die Geschwindigkeit der Reifen zu ermitteln, andernfalls sollte es nur ein einmaliges Ermitteln der Idealwerte und das Ausbalancieren dieser sein.
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

3

06.08.2014, 19:09

ok ich möchte ohne gegenwirkende Kräfte das Drehmoment ausrechnen, welches ich benötige um eine bestimmte Beschleunigung a zu erlangen.

Drehmoment ist definiert als:
M = r * F

In meiner Formelsammlung steht r ^= Kraftarm. Ich denke bei einem Reifen ist das schlichtweg der Radius?

Um jetzt auf die Beschleunigung zu kommen dachte ich an das 2. newtonsche Gesetz
F = m * a

Ineinander eingesetzt:
M = r * m * a

Ok, wenn das soweit richtig ist, kann ich nun das benötigte Drehmoment berechnen wenn ich r (Radius) und m (Masse) weiß.
Jetzt hab ich das Problem mit der Masse... Ich kann bei Unity sowohl bei einem Rigidbody die Masse einstellen, als auch beim Wheel Collider selbst. Woher nehme ich also die Masse?

Eine Beispielrechnung:
r = 0.2m, m = 1000kg, a = 10m/s2
M = 0.2m * 1000kg * 10m/s2
M = 2000 (m2 * kg) / s2

Macht das Sinn? was ist das denn für eine Einheit?
Im Umkehrschluss heißt das doch, dass auf ein Körper mit der Masse 1000kg eine Kraft F = M /r = 10.000 wirken muss nur damit es mit 10m/s2 (36 km/h2) beschleunigt oO

EDIT:
Ich hab das grade mal in Unity ausprobiert, mein Rigidbody wiegt 1000kg und seine Reifen sind 0.2m im Radius. Wenn man auf ein Button drückt wird das Drehmoment auf 2000 gesetzt. Drückt man den Button für 1 Frame, dann liegt die geschwindigkeit bei 18km/h. 36 hätten es eigentlich sein müssen...
Mit 10m/s2 zu beschleunigen ist wie mir grade auffällt wohl ziemlich schnell^^ von 0 auf 100km/h wären das ja weniger als 3 Sekunden! :D
Bin mir zwar immer noch nicht zu 100% sicher ob das alles jetzt so stimmt, aber es sieht aufjedenfall ganz gut aus

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Bigabig« (06.08.2014, 19:32)


4

06.08.2014, 19:52

Macht das Sinn? was ist das denn für eine Einheit?


Ja macht Sinn, kg*m²/s² entspricht Nm was die Einheit ist für das Drehmoment.
Wer aufhört besser werden zu wollen hört auf gut zu sein!

aktuelles Projekt:Rickety Racquet

5

06.08.2014, 20:38

hmm die rechnung mag zwar stimmen, aber i.wie haut das mit Unity nicht so wirklich hin... wenn die vorderreifen beschleunigen ist das auto langsamer als wenn die hinterreifen beschleunigen und beide zusammen (quattro antrieb^^) sind noch wieder etwas schneller. Ich weiß irgendwie nicht so richtig wie man mit wheelcollider.motorTorque umgehen soll, so wie ich mir das ursprünglich gedacht habe scheint es nicht zu funktionieren.
Die Masse des Rigidbodys hat btw keinen Einfluss auf den Wheel Collider, dafür ist scheinbar WheelCollider.Mass gedacht. Bei Verdopplung der Masse hab ich zumindest eine Halbierung der Geschwindigkeit feststellen können, unabhängig davon welche Reifen nun beschleunigen. Ähnlich verhält es sich mit dem Radius der Reifen. Verdoppelt man diesen verdoppelt sich auch die Geschwindigkeit.

Anhand der Masse der Reifen, und dem Radius der Reifen könnte ich also mit der Formel M = m * r * a das benötigte Drehmoment für eine Beschleunigung a ausrechen. Im Endeffekt hingegen unterscheiden sich aber die Geschwindigkeiten von Theorie (aufm Zettel ausgerechnet :D) und Praxis (in Unity). Ich kann mir vorstellen, dass das an der Physic Engine von Unity liegt, die Reibung etc. als Gegenkraft mit hineinberechnet, bin mir aber nicht sicher. Das mit den Reifen bleibt komisch

Werbeanzeige