Heppy Geschrieben 25. Juli 2017 Melden Share Geschrieben 25. Juli 2017 Moin moin, ich hab mich jetzt schon seit tagen durch diverse seiten gelesen verschiedene skripte angesehen usw aber ich komme auf keinen grünen ast. Hoffe ihr könnt mir hier bei dem eigentlich so einfachen problem helfen. Also ich hab ein auto eingefügt und es mit den nötigen box sowie wheelcollidern versehen, ich kann es per skript auf die eingaben der tastertur reagieren lassen. jedoch was einfach nicht gelingen will ist das ich dem auto eine höchst Geschwindigkeit verpasse.... wenn das auto ne bestimmte geschwindigkeit bereits erreicht hat und ich dann noch beschleunige geht es wunderbar wenn ich jedoch aus dem stand heraus einfach nur beschleunige überschreitet die aktuelle geschwindigkeit die höchst geschwindigkeit bei weitem ca 10 bis 80 kmh. void Bewegen() { geschwindigkeitAktuell = transform.InverseTransformDirection (Auto.velocity).z * 3.6f; //geschwindigkeitAktuell = Mathf.Round (2*22/7*reifenCol[0].radius*reifenCol[0].rpm*60/1000); if (geschwindigkeitAktuell < geschwindigkeitMaxVorwärts && Input.GetAxis ("Vertical") != 0) { //if (geschwindigkeitAktuell > geschwindigkeitMaxVorwärts) { // Auto.drag = 10; //} else { // Auto.drag = 0; //} var drehmoment = maxDrehmoment * Input.GetAxis ("Vertical"); var geschFaktor = geschwindigkeitAktuell / geschwindigkeitMaxVorwärts; var t = drehmoment * geschFaktor; var dreh = drehmoment - t; if (antriebsArt == 1) { // Frond Antrieb reifenCol [0].motorTorque = dreh; reifenCol [1].motorTorque = dreh; reifenCol [2].motorTorque = 0; reifenCol [3].motorTorque = 0; reifenCol [0].brakeTorque = 0; reifenCol [1].brakeTorque = 0; reifenCol [2].brakeTorque = 0; reifenCol [3].brakeTorque = 0; } else if (antriebsArt == 2) { // Hack Antrieb reifenCol [0].motorTorque = 0; reifenCol [1].motorTorque = 0; reifenCol [2].motorTorque = dreh; reifenCol [3].motorTorque = dreh; reifenCol [0].brakeTorque = 0; reifenCol [1].brakeTorque = 0; reifenCol [2].brakeTorque = 0; reifenCol [3].brakeTorque = 0; } else { // Allrad reifenCol [0].motorTorque = dreh; reifenCol [1].motorTorque = dreh; reifenCol [2].motorTorque = dreh; reifenCol [3].motorTorque = dreh; reifenCol [0].brakeTorque = 0; reifenCol [1].brakeTorque = 0; reifenCol [2].brakeTorque = 0; reifenCol [3].brakeTorque = 0; } } else { reifenCol [0].motorTorque = 0; reifenCol [1].motorTorque = 0; reifenCol [2].motorTorque = 0; reifenCol [3].motorTorque = 0; } } Habe bereits verschiedene ansätze probiert, welche ich hier und da aufschnappen konnte aber leider ohne bisherigen erfolg. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Zer0Cool Geschrieben 25. Juli 2017 Melden Share Geschrieben 25. Juli 2017 Bestimme die Geschwindigkeit des Autos anhand der Velocity (magnitude) des Rigidbodies des Boxcolliders. Sollte die Velocity (und damit auch die Geschwindigkeit) einen bestimmten Wert überschreiten, dann setzt du die Velocity des RBs neu mit einer vorher definierten maximalen Velocity. Die Messungen und das Neusetzen der Velocity werden in der FixedUpdate-Methode vorgenommen. Zum Hintergrund, die Velocity des RB des Boxcolliders wird auf den Drehimplus der Wheelcollider übernommen. Hier noch ein kleiner Codeschnipsel aus einem anderen Projekt: public float maxSpeed = 20.0f; public void FixedUpdate() { ... if (bikeRigidbody.velocity.magnitude > maxSpeed) { Vector3 velocity = bikeRigidbody.velocity; velocity.Normalize(); Vector3 maxVelocity = velocity * maxSpeed; bikeRigidbody.velocity = maxVelocity; } ... } Man kann das Ganze auch noch nur auf die Vorwärtsbeschleunigung (transform.forward) beschränken, aber ich denke es genügt auch so und damit darf das Auto auch wenn es beispielsweise zur Seite ausbricht nicht schneller werden. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Heppy Geschrieben 25. Juli 2017 Autor Melden Share Geschrieben 25. Juli 2017 Danke funktioniert wunderbar, ich hatte dein Codebeispiel zuerst nicht gesehen (ka warum). daher habe ich mich selbst versucht und nach vergleich des Ergebnisses keinen unterschied bemerken können. if (geschwindigkeitAktuell > geschwindigkeitMaxVorwärts) { Auto.velocity = Auto.velocity.normalized * (geschwindigkeitMaxVorwärts / 3.6f); } Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Archiviert
Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.