Unity-Tutorial: #11 – WheelCollider 2 (Speedlimit und BrakeTorque)

17.05.2010 - Carsten - Der Softwareentwickler Blog - 10 Kommentare

Unity3D CarRacing TutorialDieser 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


Zu diesem Thema hab ich übrigens bereits ähnliche Artikel verfasst. Vielleicht interessiert Dich ja einer:

10 Kommentare zu ' Unity-Tutorial: #11 – WheelCollider 2 (Speedlimit und BrakeTorque) '

Kommentare zu 'Unity-Tutorial: #11 – WheelCollider 2 (Speedlimit und BrakeTorque)' mit RSS

  1. Unity3D Tutorial Serie - Der Softwareentwickler Blog kommentierte am 17.05.2010 um 09:27 Uhr

    [...] Unity-Tutorial: #11 – WheelCollider 2 (Speedlimit und BrakeTorque)In diesem Unity-Tutorial werden wir die Vorderräder währende des Lenkens zum Einschlagen bringen. [...]

  2. Jonny kommentierte am 17.05.2010 um 16:22 Uhr

    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 :D

  3. Carsten - Der Softwareentwickler Blog kommentierte am 17.05.2010 um 19:21 Uhr

    Das stimmt, Jonny :grin: Ich werde das in den nächsten Teilen mal als Optimierung einfließen lassen :wink:

    Carsten

  4. Oliver kommentierte am 24.05.2010 um 22:12 Uhr

    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?

  5. Carsten - Der Softwareentwickler Blog kommentierte am 25.05.2010 um 08:50 Uhr

    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

  6. Oliver kommentierte am 25.05.2010 um 11:36 Uhr

    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

  7. Carsten - Der Softwareentwickler Blog kommentierte am 26.05.2010 um 08:06 Uhr

    Hallo Oliver,

    jetzt weiß ich was Du meinst :smile: 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

  8. Oliver kommentierte am 29.05.2010 um 22:53 Uhr

    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

  9. Oliver kommentierte am 29.05.2010 um 23:53 Uhr

    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

  10. Carsten - Der Softwareentwickler Blog kommentierte am 30.05.2010 um 22:18 Uhr

    Hallo Oliver,

    vielen Dank für das Skript! Ich werde mir das in der nächsten Woche mal genauer anschauen :smile:

    Gruß Carsten

Leider ist die Kommentarfunktion zur Zeit deaktiviert.