Search Unity

  1. Megacity Metro Demo now available. Download now.
    Dismiss Notice
  2. Unity support for visionOS is now available. Learn more in our blog post.
    Dismiss Notice

Javascript, Unity, code won't limit turn angle... help please?

Discussion in 'Scripting' started by tallieke, Jul 7, 2015.

  1. tallieke

    tallieke

    Joined:
    Aug 17, 2014
    Posts:
    37
    Javascript, Unity 4

    Hey guys, thanks for reading. Heres the problem, I wrote a car control script for my racing game and one of the things it is supposed to do is limit the turning angle of the car at higher speeds so it can turn on a dime when going 120 mph. makes sense right? so heres the code and down below I will write the part that is supposed to do the angle limiting.

    Code (JavaScript):
    1. #pragma strict
    2. var wheelFL : WheelCollider;
    3. var wheelFR : WheelCollider;
    4. var wheelRL : WheelCollider;
    5. var wheelRR : WheelCollider;
    6.  
    7. var wheelFLTrans : Transform;
    8. var wheelFRTrans : Transform;
    9. var wheelRLTrans : Transform;
    10. var wheelRRTrans : Transform;
    11.  
    12. var lowestSteerAtSpeed : float = 50;
    13.  
    14. var lowSpeedSteerAngle : float = 10;
    15. var highSpeedSteerAngle : float = 1;
    16.  
    17. var decellarationSpeed : float = 30;
    18. var maxTorque : float = 50;
    19. var currentSpeed : float;
    20. var highestSpeed : float = 150;
    21. var maxReverseSpeed : float = 50;
    22. function Start () {
    23. rigidbody.centerOfMass.y = -0.09;
    24. }
    25.  
    26. function FixedUpdate () {
    27. controle ();
    28. }
    29. function Update () {
    30. wheelFLTrans.Rotate(wheelFL.rpm/60*360*Time.deltaTime,0,0);
    31. wheelFRTrans.Rotate(wheelFL.rpm/60*360*Time.deltaTime,0,0);
    32. wheelRLTrans.Rotate(wheelFL.rpm/60*360*Time.deltaTime,0,0);
    33. wheelRRTrans.Rotate(wheelFL.rpm/60*360*Time.deltaTime,0,0);
    34. //changing actual wheel direction
    35. wheelFLTrans.localEulerAngles.y = wheelFL.steerAngle - wheelFLTrans.localEulerAngles.z;
    36. wheelFRTrans.localEulerAngles.y = wheelFL.steerAngle - wheelFLTrans.localEulerAngles.z;
    37. }
    38.  
    39. function controle () {
    40. currentSpeed = 2*22/7*wheelRL.radius*wheelRL.rpm*60/1000;
    41. currentSpeed = Mathf.Round(currentSpeed);
    42.  
    43. if(currentSpeed <= highestSpeed && currentSpeed > -maxReverseSpeed){
    44. wheelRR.motorTorque = maxTorque * Input.GetAxis("Vertical");
    45. wheelRL.motorTorque = maxTorque * Input.GetAxis("Vertical");
    46. }
    47. else {
    48. wheelRR.motorTorque = 0;
    49. wheelRL.motorTorque = 0;
    50. }
    51.  
    52. wheelRR.motorTorque = maxTorque * Input.GetAxis("Vertical");
    53. wheelRL.motorTorque = maxTorque * Input.GetAxis("Vertical");
    54. if (Input.GetButton("Vertical")==false){
    55. wheelRR.brakeTorque = decellarationSpeed;
    56. wheelRL.brakeTorque = decellarationSpeed;
    57. }
    58. else {
    59. wheelRR.brakeTorque = 0;
    60. wheelRL.brakeTorque = 0;
    61. }
    62.  
    63. var speedFactor = rigidbody.velocity.magnitude/highestSpeed;
    64. var currentSteerAngle = Mathf.Lerp(lowSpeedSteerAngle,highSpeedSteerAngle,speedFactor);
    65. currentSteerAngle *= Input.GetAxis("Horizontal");
    66. wheelFL.steerAngle = currentSteerAngle;
    67. wheelFR.steerAngle = currentSteerAngle;
    68. }
    so heres the part that we need to focus on!

    var speedFactor = rigidbody.velocity.magnitude/highestSpeed;
    var currentSteerAngle = Mathf.Lerp(lowSpeedSteerAngle,highSpeedSteerAngle,speedFactor);
    currentSteerAngle *= Input.GetAxis("Horizontal");
    wheelFL.steerAngle = currentSteerAngle;
    wheelFR.steerAngle = currentSteerAngle;
    }


    any help is greatly appreciated, thank you :)