Question by
NiteshRathi05 · Apr 05, 2018 at 10:15 AM ·
rigidbodycar gamecar physicswheel colliders
How to set reverse speed limit of car?
i wanna set reverse speed limit of my car. here is my car controller script.
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityStandardAssets.CrossPlatformInput; using UnityEngine.UI;
public class controlls : MonoBehaviour {
public Rigidbody rb;
public WheelCollider FR,FL,RR,RL;
public Transform wheelFR, WheelFL, WheelRR, WheelRL;
public Transform com;
public float trunRadius = 16f;
public float torque = 25f;
public float brakeT = 100f;
public float Antiroll = 2000.0f;
public Text speedText;
public Camera cam1;
public Camera cam2;
void Start () {
rb.GetComponent<Rigidbody> ();
rb.centerOfMass = com.localPosition;
cam1.enabled = true;
cam2.enabled = false;
}
public float speed()
{
return rb.velocity.magnitude * 7f;
}
void Update () {
DoRollBar (FR, FL);
DoRollBar (RR, RL);
FL.steerAngle = CrossPlatformInputManager.GetAxis("Horizontal") * trunRadius;
FR.steerAngle = CrossPlatformInputManager.GetAxis("Horizontal") * trunRadius;
rotateWheelMesh ();
FL.ConfigureVehicleSubsteps(5f,12,15);
FR.ConfigureVehicleSubsteps(5f,12,15);
RR.ConfigureVehicleSubsteps(5f,12,15);
RL.ConfigureVehicleSubsteps(5f,12,15);
speedText.text = "Speed: " + speed().ToString("f0") + " Mp/H";
if (speed () < 110) {
RR.motorTorque = torque * CrossPlatformInputManager.GetAxis ("Vertical");
RL.motorTorque = torque * CrossPlatformInputManager.GetAxis ("Vertical");
FL.motorTorque = torque * CrossPlatformInputManager.GetAxis ("Vertical");
FR.motorTorque = torque * CrossPlatformInputManager.GetAxis ("Vertical");
} else {
RR.motorTorque = 0;
RL.motorTorque = 0;
FL.motorTorque = 0;
FR.motorTorque = 0;
}
}
public void OnPointerDown()
{
FL.brakeTorque = brakeT;
FR.brakeTorque = brakeT;
RR.brakeTorque = brakeT;
RL.brakeTorque = brakeT;
RR.motorTorque = 0;
RL.motorTorque = 0;
FL.motorTorque = 0;
FR.motorTorque = 0;
}
public void OnPointerUp()
{
FL.brakeTorque = 0;
FR.brakeTorque = 0;
RR.brakeTorque = 0;
RL.brakeTorque = 0;
}
public void touchcam()
{
cam1.enabled = !cam1.enabled;
cam2.enabled = !cam2.enabled;
}
void rotateWheelMesh(){
WheelFL.localEulerAngles = new Vector3(WheelFL.localEulerAngles.x, FL.steerAngle - WheelFL.localEulerAngles.z, WheelFL.localEulerAngles.z);
wheelFR.localEulerAngles = new Vector3(wheelFR.localEulerAngles.x, FR.steerAngle - wheelFR.localEulerAngles.z, wheelFR.localEulerAngles.z);
WheelFL.Rotate(RL.rpm / 60 * 360 * Time.deltaTime, 0, 0);
wheelFR.Rotate(FR.rpm / 60 * 360 * Time.deltaTime, 0, 0);
WheelRL.Rotate(RL.rpm / 60 * 360 * Time.deltaTime, 0, 0);
WheelRR.Rotate(RR.rpm / 60 * 360 * Time.deltaTime, 0, 0);
}
void DoRollBar(WheelCollider wheelL,WheelCollider wheelR)
{
WheelHit hit;
float travelL= 1.0f;
float travelR = 1.0f;
bool groundedL = wheelL.GetGroundHit (out hit);
if (groundedL)
travelL = (-wheelL.transform.InverseTransformPoint(hit.point).y -wheelL.radius) / wheelL.suspensionDistance;
bool groundedR = wheelL.GetGroundHit (out hit);
if (groundedR)
travelL = (-wheelR.transform.InverseTransformPoint(hit.point).y -wheelR.radius) / wheelR.suspensionDistance;
float antirollforce = (travelL - travelR) * Antiroll;
if (groundedL)
rb.AddForceAtPosition (wheelL.transform.up * -antirollforce, wheelL.transform.position);
if (groundedR)
rb.AddForceAtPosition (wheelR.transform.up * -antirollforce, wheelR.transform.position);
}
}
Comment
Your answer
Follow this Question
Related Questions
Can i Give elivation to car(to fly) using RCC V2 unity 0 Answers
How can I make the character rotating the steering wheel inside the car? 0 Answers
Simple arcade vehicle turning with or w/o wheel colliders 0 Answers
Wheel colliders are not sticking to Ground 0 Answers
Car getting Stuck when having 0 velocity,Rigidbody getting Stuck while having 0 velo. 0 Answers