car drives, no suspension
This commit is contained in:
70
Assets/Scripts/WheelController.cs
Normal file
70
Assets/Scripts/WheelController.cs
Normal file
@@ -0,0 +1,70 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user