void Engine(){
Earn free bitcoin //Reversing Bool.
if(gasInput < 0 && transform.InverseTransformDirection(rigid.velocity).z < 1 && canGoReverseNow)
reversing = true;
else
reversing = false;
speed = rigid.velocity.magnitude * speedmultiplier;
//Acceleration Calculation.
acceleration = 0f;
acceleration = (transform.InverseTransformDirection(rigid.velocity).z - lastVelocity) / Time.fixedDeltaTime;
lastVelocity = transform.InverseTransformDirection(rigid.velocity).z;
//Drag Limit.
float rpm = 0f;
float wheelRPM = ((Mathf.Abs((wheelColliders_L[2].rpm * wheelColliders_L[2].radius) + (wheelColliders_R[2].rpm * wheelColliders_R[2].radius)) / 2f) / 3.25f);
if(!reversing)
rpm = Mathf.Clamp((Mathf.Lerp(minEngineRPM, maxEngineRPM, wheelRPM / maxSpeed) + minEngineRPM) * (Mathf.Clamp01(gasInput + Mathf.Abs(steerInput))), minEngineRPM, maxEngineRPM);
else
rpm = Mathf.Clamp((Mathf.Lerp(minEngineRPM, maxEngineRPM, wheelRPM / maxSpeed) + minEngineRPM) * (Mathf.Clamp01(brakeInput + Mathf.Abs(steerInput))), minEngineRPM, maxEngineRPM);
engineRPM = Mathf.Lerp(engineRPM, (rpm + UnityEngine.Random.Range(-50f, 50f)) * fuelInput, Time.deltaTime * 2f);
if(!engineRunning)
fuelInput = 0;
else
fuelInput = fuelInputMultiplier;
//Auto Reverse Bool.
if(autoReverse){
canGoReverseNow = true;
}else{
if(brakeInput > .1f && speed < 5)
reverseDelay += Time.deltaTime;
else if(brakeInput > 0 && transform.InverseTransformDirection(rigid.velocity).z > 1f)
reverseDelay = 0f;
}
if(reverseDelay >= .75f)
canGoReverseNow = true;
else
canGoReverseNow = false;
for(int i = 0; i < wheelColliders_L.Length; i++){
ApplyMotorTorque(wheelColliders_L[i], engineTorque, true);
wheelColliders_L[i].wheelDampingRate = Mathf.Lerp(100f, 0f, gasInput);
}
for(int i = 0; i < wheelColliders_R.Length; i++){
ApplyMotorTorque(wheelColliders_R[i], engineTorque, false);
wheelColliders_R[i].wheelDampingRate = Mathf.Lerp(100f, 0f, gasInput);
}
//Steering.
if(!reversing){
if(wheelColliders_L[2].isGrounded || wheelColliders_R[2].isGrounded){
if(Mathf.Abs(rigid.angularVelocity.y) < 1f){
rigid.AddRelativeTorque((Vector3.up * steerInput) * steerTorque, ForceMode.Acceleration);
}
}
}else{
if(wheelColliders_L[2].isGrounded || wheelColliders_R[2].isGrounded){
if(Mathf.Abs(rigid.angularVelocity.y) < 1f){
rigid.AddRelativeTorque((-Vector3.up * steerInput) * steerTorque, ForceMode.Acceleration);
}
}
}
}
public void ApplyMotorTorque(WheelCollider wc, float torque, bool leftSide){
WheelHit hit;
wc.GetGroundHit(out hit);
if(Mathf.Abs(hit.forwardSlip) > 1f)
torque = 0;
if(speed > maxSpeed || Mathf.Abs(wc.rpm) > 1000 || Mathf.Abs(wc.rpm) > 1000 || !engineRunning)
torque = 0;
if(reversing && speed > 55)
torque = 0;
if(!engineRunning || !wc.isGrounded)
torque = 0;
if(!reversing){
if(leftSide)
wc.motorTorque = torque * Mathf.Clamp((Mathf.Clamp(gasInput * fuelInput, 0f, 1f)) + Mathf.Clamp(steerInput, -1f, 1f), -1f, 1f) * engineTorqueCurve.Evaluate(speed);
else
wc.motorTorque = torque * Mathf.Clamp((Mathf.Clamp(gasInput * fuelInput, 0f, 1f)) + Mathf.Clamp(-steerInput, -1f, 1f), -1f, 1f) * engineTorqueCurve.Evaluate(speed);
}else{
wc.motorTorque = (-torque) * brakeInput;
}
}
public void ApplyBrakeTorque(WheelCollider wc, float brake){
wc.brakeTorque = brake;
}
public void Braking (){
for(int i = 0; i < allWheelColliders.Count; i++){
if(brakeInput > .1f && !reversing){
ApplyBrakeTorque(allWheelColliders[i], brakeTorque * (brakeInput));
}else if(brakeInput > .1f && reversing){
ApplyBrakeTorque(allWheelColliders[i], 0f);
}else if(gasInput < .1f && Mathf.Abs(steerInput) < .1f){
ApplyBrakeTorque(allWheelColliders[i], 10f);
}else{
ApplyBrakeTorque(allWheelColliders[i], 0f);
}
}
}
void Inputs(){
if(!canControl){
gasInput = 0;
brakeInput = 0;
steerInput = 0;
return;
}
//Motor Input.
gasInput = Input.GetAxis("Vertical") * gasInputMultiplier;
//Brake Input
brakeInput = -Mathf.Clamp(gasInput, -1f, 0f);
//Steering Input.
steerInput = Input.GetAxis("Horizontal");
}
public void Sounds(){
//Engine Audio Volume.
if(engineRunningAudioClip){
if(!reversing)
engineRunningAudio.volume = Mathf.Lerp (engineRunningAudio.volume, Mathf.Clamp (Mathf.Clamp01(gasInput + Mathf.Abs(steerInput / 2f)), minEngineSoundVolume, maxEngineSoundVolume), Time.deltaTime * 10f);
else
engineRunningAudio.volume = Mathf.Lerp (engineRunningAudio.volume, Mathf.Clamp (brakeInput, minEngineSoundVolume, maxEngineSoundVolume), Time.deltaTime * 10f);
if(engineRunning)
engineRunningAudio.pitch = Mathf.Lerp (engineRunningAudio.pitch, Mathf.Lerp (minEngineSoundPitch, maxEngineSoundPitch, (engineRPM) / (maxEngineRPM)), Time.deltaTime * 10f);
else
engineRunningAudio.pitch = Mathf.Lerp (engineRunningAudio.pitch, 0, Time.deltaTime * 10f);
}
if(engineIdleAudioClip){
if(!reversing)
engineIdleAudio.volume = Mathf.Lerp (engineIdleAudio.volume, Mathf.Clamp ((1 + (-gasInput)), minEngineSoundVolume, 1f), Time.deltaTime * 10f);
else
engineIdleAudio.volume = Mathf.Lerp (engineIdleAudio.volume, Mathf.Clamp ((1 + (-brakeInput)), minEngineSoundVolume, 1f), Time.deltaTime * 10f);
if(engineRunning)
engineIdleAudio.pitch = Mathf.Lerp (engineIdleAudio.pitch, Mathf.Lerp (minEngineSoundPitch, maxEngineSoundPitch, (engineRPM) / (maxEngineRPM)), Time.deltaTime * 10f);
else
engineIdleAudio.pitch = Mathf.Lerp (engineIdleAudio.pitch, 0, Time.deltaTime * 10f);
}
if(!reversing)
brakeAudio.volume = Mathf.Lerp (0f, maxBrakeSoundVolume, Mathf.Clamp01(brakeInput) * Mathf.Lerp(0f, 1f, wheelColliders_L[2].rpm / 50f));
else
brakeAudio.volume = 0f;
}
Earn free bitcoin //Reversing Bool.
if(gasInput < 0 && transform.InverseTransformDirection(rigid.velocity).z < 1 && canGoReverseNow)
reversing = true;
else
reversing = false;
speed = rigid.velocity.magnitude * speedmultiplier;
//Acceleration Calculation.
acceleration = 0f;
acceleration = (transform.InverseTransformDirection(rigid.velocity).z - lastVelocity) / Time.fixedDeltaTime;
lastVelocity = transform.InverseTransformDirection(rigid.velocity).z;
//Drag Limit.
float rpm = 0f;
float wheelRPM = ((Mathf.Abs((wheelColliders_L[2].rpm * wheelColliders_L[2].radius) + (wheelColliders_R[2].rpm * wheelColliders_R[2].radius)) / 2f) / 3.25f);
if(!reversing)
rpm = Mathf.Clamp((Mathf.Lerp(minEngineRPM, maxEngineRPM, wheelRPM / maxSpeed) + minEngineRPM) * (Mathf.Clamp01(gasInput + Mathf.Abs(steerInput))), minEngineRPM, maxEngineRPM);
else
rpm = Mathf.Clamp((Mathf.Lerp(minEngineRPM, maxEngineRPM, wheelRPM / maxSpeed) + minEngineRPM) * (Mathf.Clamp01(brakeInput + Mathf.Abs(steerInput))), minEngineRPM, maxEngineRPM);
engineRPM = Mathf.Lerp(engineRPM, (rpm + UnityEngine.Random.Range(-50f, 50f)) * fuelInput, Time.deltaTime * 2f);
if(!engineRunning)
fuelInput = 0;
else
fuelInput = fuelInputMultiplier;
//Auto Reverse Bool.
if(autoReverse){
canGoReverseNow = true;
}else{
if(brakeInput > .1f && speed < 5)
reverseDelay += Time.deltaTime;
else if(brakeInput > 0 && transform.InverseTransformDirection(rigid.velocity).z > 1f)
reverseDelay = 0f;
}
if(reverseDelay >= .75f)
canGoReverseNow = true;
else
canGoReverseNow = false;
for(int i = 0; i < wheelColliders_L.Length; i++){
ApplyMotorTorque(wheelColliders_L[i], engineTorque, true);
wheelColliders_L[i].wheelDampingRate = Mathf.Lerp(100f, 0f, gasInput);
}
for(int i = 0; i < wheelColliders_R.Length; i++){
ApplyMotorTorque(wheelColliders_R[i], engineTorque, false);
wheelColliders_R[i].wheelDampingRate = Mathf.Lerp(100f, 0f, gasInput);
}
//Steering.
if(!reversing){
if(wheelColliders_L[2].isGrounded || wheelColliders_R[2].isGrounded){
if(Mathf.Abs(rigid.angularVelocity.y) < 1f){
rigid.AddRelativeTorque((Vector3.up * steerInput) * steerTorque, ForceMode.Acceleration);
}
}
}else{
if(wheelColliders_L[2].isGrounded || wheelColliders_R[2].isGrounded){
if(Mathf.Abs(rigid.angularVelocity.y) < 1f){
rigid.AddRelativeTorque((-Vector3.up * steerInput) * steerTorque, ForceMode.Acceleration);
}
}
}
}
public void ApplyMotorTorque(WheelCollider wc, float torque, bool leftSide){
WheelHit hit;
wc.GetGroundHit(out hit);
if(Mathf.Abs(hit.forwardSlip) > 1f)
torque = 0;
if(speed > maxSpeed || Mathf.Abs(wc.rpm) > 1000 || Mathf.Abs(wc.rpm) > 1000 || !engineRunning)
torque = 0;
if(reversing && speed > 55)
torque = 0;
if(!engineRunning || !wc.isGrounded)
torque = 0;
if(!reversing){
if(leftSide)
wc.motorTorque = torque * Mathf.Clamp((Mathf.Clamp(gasInput * fuelInput, 0f, 1f)) + Mathf.Clamp(steerInput, -1f, 1f), -1f, 1f) * engineTorqueCurve.Evaluate(speed);
else
wc.motorTorque = torque * Mathf.Clamp((Mathf.Clamp(gasInput * fuelInput, 0f, 1f)) + Mathf.Clamp(-steerInput, -1f, 1f), -1f, 1f) * engineTorqueCurve.Evaluate(speed);
}else{
wc.motorTorque = (-torque) * brakeInput;
}
}
public void ApplyBrakeTorque(WheelCollider wc, float brake){
wc.brakeTorque = brake;
}
public void Braking (){
for(int i = 0; i < allWheelColliders.Count; i++){
if(brakeInput > .1f && !reversing){
ApplyBrakeTorque(allWheelColliders[i], brakeTorque * (brakeInput));
}else if(brakeInput > .1f && reversing){
ApplyBrakeTorque(allWheelColliders[i], 0f);
}else if(gasInput < .1f && Mathf.Abs(steerInput) < .1f){
ApplyBrakeTorque(allWheelColliders[i], 10f);
}else{
ApplyBrakeTorque(allWheelColliders[i], 0f);
}
}
}
void Inputs(){
if(!canControl){
gasInput = 0;
brakeInput = 0;
steerInput = 0;
return;
}
//Motor Input.
gasInput = Input.GetAxis("Vertical") * gasInputMultiplier;
//Brake Input
brakeInput = -Mathf.Clamp(gasInput, -1f, 0f);
//Steering Input.
steerInput = Input.GetAxis("Horizontal");
}
public void Sounds(){
//Engine Audio Volume.
if(engineRunningAudioClip){
if(!reversing)
engineRunningAudio.volume = Mathf.Lerp (engineRunningAudio.volume, Mathf.Clamp (Mathf.Clamp01(gasInput + Mathf.Abs(steerInput / 2f)), minEngineSoundVolume, maxEngineSoundVolume), Time.deltaTime * 10f);
else
engineRunningAudio.volume = Mathf.Lerp (engineRunningAudio.volume, Mathf.Clamp (brakeInput, minEngineSoundVolume, maxEngineSoundVolume), Time.deltaTime * 10f);
if(engineRunning)
engineRunningAudio.pitch = Mathf.Lerp (engineRunningAudio.pitch, Mathf.Lerp (minEngineSoundPitch, maxEngineSoundPitch, (engineRPM) / (maxEngineRPM)), Time.deltaTime * 10f);
else
engineRunningAudio.pitch = Mathf.Lerp (engineRunningAudio.pitch, 0, Time.deltaTime * 10f);
}
if(engineIdleAudioClip){
if(!reversing)
engineIdleAudio.volume = Mathf.Lerp (engineIdleAudio.volume, Mathf.Clamp ((1 + (-gasInput)), minEngineSoundVolume, 1f), Time.deltaTime * 10f);
else
engineIdleAudio.volume = Mathf.Lerp (engineIdleAudio.volume, Mathf.Clamp ((1 + (-brakeInput)), minEngineSoundVolume, 1f), Time.deltaTime * 10f);
if(engineRunning)
engineIdleAudio.pitch = Mathf.Lerp (engineIdleAudio.pitch, Mathf.Lerp (minEngineSoundPitch, maxEngineSoundPitch, (engineRPM) / (maxEngineRPM)), Time.deltaTime * 10f);
else
engineIdleAudio.pitch = Mathf.Lerp (engineIdleAudio.pitch, 0, Time.deltaTime * 10f);
}
if(!reversing)
brakeAudio.volume = Mathf.Lerp (0f, maxBrakeSoundVolume, Mathf.Clamp01(brakeInput) * Mathf.Lerp(0f, 1f, wheelColliders_L[2].rpm / 50f));
else
brakeAudio.volume = 0f;
}