using System.Collections; using System.Collections.Generic; using UnityEngine; public class WheelController : MonoBehaviour { [SerializeField] WheelCollider frontRightWheelCollider; [SerializeField] WheelCollider frontLeftWheelCollider; [SerializeField] WheelCollider rearRightWheelCollider; [SerializeField] WheelCollider rearLeftWheelCollider; //wheel meshes [SerializeField] Transform frontRightWheel; [SerializeField] Transform frontLeftWheel; [SerializeField] Transform rearRightWheel; [SerializeField] Transform rearLeftWheel; public float acceleration = 500f; public float breakingForce = 300f; public float maxTurnAngle = 15f; private float currentAcceleration = 0f; private float currentBrakeForce = 0f; private float currentTurnAngle = 0f; private void FixedUpdate() { //forward reverse input currentAcceleration = acceleration * Input.GetAxis("Vertical"); //breaking input if(Input.GetKey(KeyCode.Space)){ currentBrakeForce = breakingForce; }else{ currentBrakeForce = 0f; } //apply acceleration to front wheels| (this determines which wheel drive is the car (fwd, awd, rwd)) rearRightWheelCollider.motorTorque = currentAcceleration; rearLeftWheelCollider.motorTorque = currentAcceleration; //break applies to all four wheels frontRightWheelCollider.brakeTorque = currentBrakeForce; frontRightWheelCollider.brakeTorque = currentBrakeForce; frontRightWheelCollider.brakeTorque = currentBrakeForce; frontRightWheelCollider.brakeTorque = currentBrakeForce; //steering currentTurnAngle = maxTurnAngle * Input.GetAxis("Horizontal"); frontLeftWheelCollider.steerAngle = currentTurnAngle; frontRightWheelCollider.steerAngle = currentTurnAngle; //update wheel meshes UpdateWheel(frontLeftWheelCollider, frontLeftWheel); UpdateWheel(frontRightWheelCollider, frontRightWheel); UpdateWheel(rearLeftWheelCollider, rearLeftWheel); UpdateWheel(rearRightWheelCollider, rearRightWheel); } private void UpdateWheel(WheelCollider collider, Transform wheel){ //get collider state Vector3 position; Quaternion rotation; collider.GetWorldPose(out position, out rotation); //puts it into position and rotation //set wheel state wheel.position = position; wheel.rotation = rotation; } }