Unity-Tutorial: #11 – WheelCollider 2 (Speedlimit und BrakeTorque)
Dieser Artikel gehört zu einer ganzen Tutorial Serie. Hier gelangt Ihr zu der Artikelübersicht: Unity3D Tutorial Serie .
Im elften Unity-Tutorial wollen wir wieder mal ein bisschen in Javascript programmieren.
Und zwar will ich das Driving-Script, das für die Ansteuerung der WheelCollider verantwortlich ist, verfeinern.
Tutorial-Inhalt
In den letzten Tutorial-Folgen hatten wir dafür gesorgt, dass unser Automodell nun auch visuell drehende Räder besitzt. Und auch die Vorderräder schlagen jetzt beim Lenken ein, sodass das Fahrverhalten unseres Autos auch visuell dargestellt wird.
Jetzt wird es Zeit das Fahrverhalten zu verbessern. Hierfür wollen wir in diesem Unity-Tutorial die Geschwindigkeit unseres Auto durch eine Höchstgeschwindigkeit begrenzen.
Außerdem wollen wir nun endlich von den WheelCollider-Komponenten die BrakeTorgue-Eigenschaft nutzen, die wir später auch für eine Vollbremsung mit blockierenden Rädern nutzen können.
Unity-Tutorial #11
Wieder einmal ist das Video zu lange geworden, so dass ich es wieder auf zwei Folgen aufgeteilt habe. Viel Spaß beim Anschauen!
Video-Tutorial Abschnitt 1
Video-Tutorial Abschnitt 2
Hat es Euch gefallen? Raus mit der Sprache, ich freue mich über Eure Kommentare:-)
UPDATE: Wenn Ihr Informationen zu den verschiedenen Parametern der WheelCollider erhalten möchtet, dann empfehle ich Euch mein Unity 3D Tutorial – Wheel Collider richtig einstellen. Dort gehe ich auf die unterschiedlichen Einstellungsmöglichkeiten ein.
Downloads
Langsam wird das Script komplexer. Da mich schon einige von Euch angeschrieben haben, ob ich das Script ihnen nicht zuschicken, lade ich es hier einfach hoch, damit jeder es herunterladen kann.
Hier geht es zum Download: Driving-Script-Tutorial-11.
In der nächsten Folge dieser Tutorial-Reihe werden wir uns mal ein bisschen um das Thema Audio kümmern. Hierfür bringt Unity von Haus aus einige tolle Komponenten mit, die Ihr hier toll nutzen könnt. Ich hoffe, Euch gefällt das Thema!
Hier geht es zum zwölften Teil Unity3D – Sound mit AudioSource und Audiolistener
Wieder einmel ein erstklassiges Tuturial von dir. Kann amn es auch irgendwie machen, das wenn man den Rückwärtsgang einlegt, auf dem Tacho, die Nadel nicht in den negativen Bereich geht sondern in den Positiven und dort dann auch irgendwan hält. Es ist schon unlogisch Rücwärts mit 200 km/h zu fahren 😀
Das stimmt, Jonny 😀 Ich werde das in den nächsten Teilen mal als Optimierung einfließen lassen 😉
Carsten
Wirklich gelungene Tutorials! Ich warte gespannt auf die nächsten Teile. Ich hoffe, es werden noch welche folgen.
Oliver
PS: Wie wäre es noch mit Stoßdämpfern als Verbesserung?
Hi Oliver,
erstmal vielen Dank für Dein Lob! Das Verhalten von Stoßdämpfern kannst Du übrigens über die WheelCollider (Tutorial-Folge #3) simulieren.
Dort kannst Du die Federung und die Dämpfung einstellen. Aber stimmt natürlich, ich kann in meinem Beispiel natürlich auch ne Federung einbauen!
Gruß Carsten
Eigentlich meinte ich, wie ich die SToßdämpfer auch visuell auf die Räder anwende. Ich habe nicht den Ford genommen, sondern einen Jeep Cherokee. Dieser hat natürlich etwas mehr Federweg als der Ford, die Räder sind aber nach wie vor fest am Auto, sie drehen sich nur und lenken (dank Dir :wink:). Ich bin gerade etwas am ausprobieren, welche Eigenschaft ich von den WheelCollidern auf die passende von den Wheels anwenden soll…
Gruß Oliver
Hallo Oliver,
jetzt weiß ich was Du meinst 🙂 Das müsstest Du eigentlich über die Center-Eigenschaft machen, sprich feststellen wo befindet sich mein WheelCollider und daraufhin dann dein Reifenobjekt positionieren. In dem Fall wäre vorallem natürlich der Y-Anteil von Interesse. Allerdings hab ich das jetzt noch nicht getestet.
Carsten
Hallo,
http://answers.unity3d.com/questions/5788/using-wheel-colliders bringt die Lösung mit. Ist zwar etwas umständlich, funktioniert aber, wenns auto auf dem Boden bleibt. Sobald die räder einmal in der luft waren, sind sie warum auch immer mitten im auto, und gehen da auch nicht mehr weg… ich frag mich, wieso ageia bzw nvidia nich einfach ne eigenschaft für die Radposition gemacht haben, das wäre das erste gewesen, was ich in die WheelCollider reingeschrieben hätte :roll:…
Oliver
Okay, nach experimentieren die Lösung des Problems der Lösung oben 😕 :
function UpdateWheelHeight()
{
var localPosition : Vector3 = wheelTransform.localPosition;
var hit : WheelHit;
// see if we have contact with ground
if (wheelCollider.GetGroundHit(hit)) {
// calculate the distance between current wheel position and hit point, correct
// wheel position
localPosition.x = defaulPos.x;
localPosition.y -= Vector3.Dot(wheelTransform.position – hit.point, transform.up) – wheelCollider.radius;
localPosition.z = defaulPos.z;
}
else {
// no contact with ground, just extend wheel position with suspension distance
//localPosition = -Vector3.up * wheelCollider.suspensionDistance;
localPosition = defaulPos;
localPosition.y -= wheelCollider.suspensionDistance;
}
// actually update the position
wheelTransform.localPosition = localPosition;
}
So funktioniert es bei mir, die benötigten Variablen sind bei mir global deklariert, mein Skript funktioniert nur für ein Rad.
Viele Grüße
Oliver
Hallo Oliver,
vielen Dank für das Skript! Ich werde mir das in der nächsten Woche mal genauer anschauen 🙂
Gruß Carsten