-
-
Save victorbstan/e5903829576eaf6ce5e3 to your computer and use it in GitHub Desktop.
using UnityEngine; | |
using System.Collections; | |
public class CarControl : MonoBehaviour { | |
// NOTE: Companion script for wheel suspensions, attach to each wheel. | |
// https://gist.github.com/victorbstan/4dde0d0b4203c248423e | |
// PUBLIC | |
public bool driveable = false; | |
// Wheel Wrapping Objects | |
public Transform frontLeftWheelWrapper; | |
public Transform frontRightWheelWrapper; | |
public Transform rearLeftWheelWrapper; | |
public Transform rearRightWheelWrapper; | |
// Wheel Meshes | |
// Front | |
public Transform frontLeftWheelMesh; | |
public Transform frontRightWheelMesh; | |
// Rear | |
public Transform rearLeftWheelMesh; | |
public Transform rearRightWheelMesh; | |
// Wheel Colliders | |
// Front | |
public WheelCollider wheelFL; | |
public WheelCollider wheelFR; | |
// Rear | |
public WheelCollider wheelRL; | |
public WheelCollider wheelRR; | |
public float maxTorque = 20f; | |
public float brakeTorque = 100f; | |
// max wheel turn angle; | |
public float maxWheelTurnAngle = 30f; // degrees | |
// car's center of mass | |
public Vector3 centerOfMass = new Vector3(0f, 0f, 0f); // unchanged | |
// GUI | |
//... | |
public float RO_speed; // READ ONLY (Debug) | |
public float RO_EngineTorque; // READ ONLY (Debug) | |
public float RO_SteeringAngleFL; // READ ONLY (Debug) | |
public float RO_SteeringAngleFR; // READ ONLY (Debug) | |
public float RO_BrakeTorque; // READ ONLY (Debug) | |
// PRIVATE | |
// acceleration increment counter | |
private float torquePower = 0f; | |
// turn increment counter | |
private float steerAngle = 0f; | |
// original wheel positions | |
// Front Left | |
private float wheelMeshWrapperFLx; | |
private float wheelMeshWrapperFLy; | |
private float wheelMeshWrapperFLz; | |
// Front Right | |
private float wheelMeshWrapperFRx; | |
private float wheelMeshWrapperFRy; | |
private float wheelMeshWrapperFRz; | |
// Rear Left | |
private float wheelMeshWrapperRLx; | |
private float wheelMeshWrapperRLy; | |
private float wheelMeshWrapperRLz; | |
// Rear Right | |
private float wheelMeshWrapperRRx; | |
private float wheelMeshWrapperRRy; | |
private float wheelMeshWrapperRRz; | |
void Start () { | |
rigidbody.centerOfMass = centerOfMass; | |
// Setup initial values | |
// Front Left | |
// wheelMeshWrapperFLx = frontLeftWheelWrapper.localPosition.x; | |
// wheelMeshWrapperFLy = frontLeftWheelWrapper.localPosition.y; | |
// wheelMeshWrapperFLz = frontLeftWheelWrapper.localPosition.z; | |
// Front Right | |
// wheelMeshWrapperFRx = frontRightWheelWrapper.localPosition.x; | |
// wheelMeshWrapperFRy = frontRightWheelWrapper.localPosition.y; | |
// wheelMeshWrapperFRz = frontRightWheelWrapper.localPosition.z; | |
// Rear Left | |
// wheelMeshWrapperRLx = rearLeftWheelWrapper.localPosition.x; | |
// wheelMeshWrapperRLy = rearLeftWheelWrapper.localPosition.y; | |
// wheelMeshWrapperRLz = rearLeftWheelWrapper.localPosition.z; | |
// Rear Right | |
// wheelMeshWrapperRRx = rearRightWheelWrapper.localPosition.x; | |
// wheelMeshWrapperRRy = rearRightWheelWrapper.localPosition.y; | |
// wheelMeshWrapperRRz = rearRightWheelWrapper.localPosition.z; | |
} | |
// Visual updates | |
void Update () { | |
if (! driveable) { | |
return; | |
} | |
// SETUP WHEEL MESHES | |
// Turn the mesh wheels | |
frontLeftWheelWrapper.localEulerAngles = new Vector3(0, steerAngle, 0); | |
frontRightWheelWrapper.localEulerAngles = new Vector3(0, steerAngle, 0); | |
// Wheel rotation | |
frontLeftWheelMesh.Rotate(0, wheelFL.rpm / 60 * 360 * Time.deltaTime, 0); | |
frontRightWheelMesh.Rotate(0, wheelFR.rpm / 60 * 360 * Time.deltaTime, 0); | |
rearLeftWheelMesh.Rotate(0, wheelRL.rpm / 60 * 360 * Time.deltaTime, 0); | |
rearRightWheelMesh.Rotate(0, wheelRR.rpm / 60 * 360 * Time.deltaTime, 0); | |
// Audio | |
audio.pitch = (torquePower / maxTorque) + 0.5f; | |
} | |
// Physics updates | |
void FixedUpdate () { | |
if (! driveable) { | |
return; | |
} | |
// CONTROLS - FORWARD & RearWARD | |
if ( Input.GetKey(KeyCode.Space) ) { | |
// BRAKE | |
torquePower = 0f; | |
wheelRL.brakeTorque = brakeTorque; | |
wheelRR.brakeTorque = brakeTorque; | |
} else { | |
// SPEED | |
torquePower = maxTorque * Mathf.Clamp( Input.GetAxis("Vertical"), -1, 1 ); | |
wheelRL.brakeTorque = 0f; | |
wheelRR.brakeTorque = 0f; | |
} | |
// Apply torque | |
wheelRR.motorTorque = torquePower; | |
wheelRL.motorTorque = torquePower; | |
// Debug.Log(Input.GetAxis("Vertical")); | |
Debug.Log("torquePower: " + torquePower); | |
Debug.Log("brakeTorque RL: " + wheelRL.brakeTorque); | |
Debug.Log("brakeTorque RR: " + wheelRR.brakeTorque); | |
Debug.Log("steerAngle: " + steerAngle); | |
// CONTROLS - LEFT & RIGHT | |
// apply steering to front wheels | |
steerAngle = maxWheelTurnAngle * Input.GetAxis("Horizontal"); | |
wheelFL.steerAngle = steerAngle; | |
wheelFR.steerAngle = steerAngle; | |
// Debug info | |
RO_BrakeTorque = wheelRL.brakeTorque; | |
RO_SteeringAngleFL = wheelFL.steerAngle; | |
RO_SteeringAngleFR = wheelFR.steerAngle; | |
RO_EngineTorque = torquePower; | |
// SPEED | |
// debug info | |
RO_speed = rigidbody.velocity.magnitude; | |
// KEYBOARD INPUT | |
// FORWARD | |
if ( Input.GetKey(KeyCode.W) ) { | |
// Debug.Log("FORWARD"); | |
} | |
// BACKWARD | |
if ( Input.GetKey(KeyCode.S) ) { | |
// Debug.Log("BACKWARD"); | |
} | |
// LEFT | |
if ( Input.GetKey(KeyCode.A) ) { | |
// Debug.Log("LEFT"); | |
} | |
// RIGHT | |
if ( Input.GetKey(KeyCode.D) ) { | |
// Debug.Log("RIGHT"); | |
} | |
// BRAKE | |
if ( Input.GetKey(KeyCode.Space) ) { | |
// Debug.Log("SPACE"); | |
} | |
} | |
} |
Hello everyone! I don't know why I am getting the following issue whenever I am entering play mode after assigning the scrip to my car: -
" ArgumentNullException: Value cannot be null.
Parameter name: source UnityEngine.AudioSource.set_pitch (System.Single value) (at <7117d168a9ec4e518e0de7d9c98bd09a>:0)
CarMovement.Update () (at Assets/Scripts/CarMovement.cs:125) "
I cannot find any fix for it (I am a beginner). I have assigned the desired objects to every variable slot. Please Help.
Just to be informed I am using this ( https://assetstore.unity.com/packages/3d/vehicles/land/free-sci-fi-car-184607 ) car for my project and have assigned the wheel colliders to its wheels.
Please Help.
My car gets sent flying into the air, how do i fix this?
Add rigidbody to it.
What do you mean by "Wheel Wrapper"?
I want to change the controls to a screen button, how can I convert this to a button input, for example I press gas button and it will move forward, what function makes it move forward when w is pressed and what function makes it go left and right when a and d is pressed, the getKeycode function has nothing inside...