GibTreaty

Wheel Controller

Jan 8th, 2015
234
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.88 KB | None | 0 0
  1. using UnityEngine;
  2. using System.Collections;
  3.  
  4. public class Wheel : MonoBehaviour {
  5.  
  6.     [SerializeField, Range(-1, 1)]
  7.     float _accelerationMultiplier;
  8.  
  9.     [SerializeField, Range(-1, 1)]
  10.     float _brakeMultiplier;
  11.  
  12.     [SerializeField, Range(-1, 1)]
  13.     float _steerAngleMultiplier;
  14.  
  15.     [SerializeField]
  16.     Transform _mesh;
  17.  
  18.     WheelCollider _wheelCollider;
  19.  
  20.     #region Properties
  21.     public float Acceleration {
  22.         get {
  23.             return WheelCollider ? WheelCollider.motorTorque : 0;
  24.         }
  25.         set {
  26.             if(WheelCollider) WheelCollider.motorTorque = value * AccelerationMultiplier;
  27.         }
  28.     }
  29.  
  30.     public float AccelerationMultiplier {
  31.         get { return _accelerationMultiplier; }
  32.         set { _accelerationMultiplier = Mathf.Clamp(value, -1, 1); }
  33.     }
  34.  
  35.     public float Brake {
  36.         get {
  37.             return WheelCollider ? WheelCollider.brakeTorque : 0;
  38.         }
  39.         set {
  40.             if(WheelCollider) WheelCollider.brakeTorque = value * BrakeMultiplier;
  41.         }
  42.     }
  43.  
  44.     public float BrakeMultiplier {
  45.         get { return _brakeMultiplier; }
  46.         set { _brakeMultiplier = Mathf.Clamp(value, -1, 1); }
  47.     }
  48.  
  49.     public Transform Mesh {
  50.         get { return _mesh; }
  51.         set { _mesh = value; }
  52.     }
  53.  
  54.     public float SteerAngle {
  55.         get {
  56.             return WheelCollider ? WheelCollider.steerAngle : 0;
  57.         }
  58.         set {
  59.             if(WheelCollider) WheelCollider.steerAngle = value * SteerAngleMultiplier;
  60.         }
  61.     }
  62.  
  63.     public float SteerAngleMultiplier {
  64.         get { return _steerAngleMultiplier; }
  65.         set { _steerAngleMultiplier = Mathf.Clamp(value, -1, 1); }
  66.     }
  67.  
  68.     public WheelCollider WheelCollider {
  69.         get {
  70.             if(!_wheelCollider) _wheelCollider = GetComponent<WheelCollider>();
  71.  
  72.             return _wheelCollider;
  73.         }
  74.     }
  75.     #endregion
  76.  
  77.     void LateUpdate() {
  78.         if(!WheelCollider || !_mesh) {
  79.             enabled = false;
  80.             return;
  81.         }
  82.  
  83.         Vector3 position;
  84.         Quaternion rotation;
  85.  
  86.         WheelCollider.GetWorldPose(out position, out rotation);
  87.  
  88.         Mesh.position = position;
  89.         Mesh.rotation = rotation;
  90.     }
  91. }
Advertisement
Add Comment
Please, Sign In to add comment