|
|
- using UnityEngine;
- using System.Collections;
-
- public class Suspension : MonoBehaviour {
-
- public GameObject dispWheel;
- public float supLength;
- public float supStrength;
- public float supDampner;
-
- public Rigidbody carRigid;
-
- public RaycastHit supHit;
- public float supcompressionRatio;
-
-
- //public GameObject carBody;
-
- // Use this for initialization
- void Start () {
- carRigid = transform.parent.GetComponent<Rigidbody>();
-
- if (carRigid == null)
- carRigid = transform.root.GetComponentInChildren<Rigidbody>();
-
- }
-
- // Update is called once per frame
- void FixedUpdate () {
- float compRatio = calcCompRatio ();
-
- if (compRatio !=0)
- calcForce (compRatio);
-
- }
-
- void Update(){
- wheelDisplay (supcompressionRatio);
- }
-
- private float calcCompRatio(){
- float compressionRatio = 0;
- RaycastHit hit;
- Ray ray = new Ray (transform.position, -transform.up);
-
- Debug.DrawRay (ray.origin, ray.direction*supLength, Color.green);
-
- if (Physics.Raycast (ray, out hit, supLength)) {
- Debug.DrawRay (ray.origin, ray.direction*hit.distance, Color.red);
-
- compressionRatio = 1-hit.distance/supLength;
- }
- supHit = hit;
- supcompressionRatio = compressionRatio;
-
- return compressionRatio;
-
- }
-
- private void calcForce(float compRatio){
-
- Vector3 curVel = carRigid.GetPointVelocity (transform.position);
- Vector3 curForce = Vector3.Project (curVel, transform.up);
- Vector3 newForce = Vector3.up * supStrength * compRatio;
-
- Vector3 deltaForce = newForce - curForce*supDampner ;
-
- //Debug.Log (deltaForce);
- carRigid.AddForceAtPosition (deltaForce, transform.position);
-
-
-
- }
-
- private void wheelDisplay(float compRatio){
- if (dispWheel == null)
- return;
-
- Vector3 newPos = transform.position;
-
- newPos.y = transform.position.y - ((1 - compRatio) * supLength)+ (0.25f * dispWheel.transform.lossyScale.y);
- dispWheel.transform.position = newPos;
-
- }
-
-
- }
|