Click here to Skip to main content
15,884,176 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
Hi i am new to unity .i have a problem object is moving along the path but when turning the road my object is taking the wide turn for that i set waypoint also not working .can u help me anyone below code.help me
C#
var FrontLeftWheel : WheelCollider;
var FrontRightWheel : WheelCollider;


var GearRatio : float[];
var CurrentGear : int = 0;

var EngineTorque : float = 600.0f;
var MaxEngineRPM : float = 3000.0f;
var MinEngineRPM : float = 1000.0f;
private var EngineRPM : float = 0.0f;


var waypointContainer : GameObject;
private var waypoints : Array;
public var currentWaypoint : int = 0;


private var inputSteer : float = 0.0;
private var inputTorque : float = 0.0;

function Start () {

    rigidbody.centerOfMass.y=-1.5;


    GetWaypoints();
}

function Update () {


    rigidbody.drag = rigidbody.velocity.magnitude / 250;

  
    NavigateTowardsWaypoint();

 
    EngineRPM = (FrontLeftWheel.rpm + FrontRightWheel.rpm)/2 * GearRatio[CurrentGear];
    ShiftGears();

    FrontLeftWheel.motorTorque = EngineTorque / GearRatio[CurrentGear] * inputTorque;
    FrontRightWheel.motorTorque = EngineTorque / GearRatio[CurrentGear] * inputTorque;

   
    FrontLeftWheel.steerAngle = 10 * inputSteer;
    FrontRightWheel.steerAngle = 10 * inputSteer;
}

function ShiftGears() {

    if ( EngineRPM >= MaxEngineRPM ) {
        var AppropriateGear : int = CurrentGear;

        for ( var i = 0; i < GearRatio.length; i ++ ) {
            if ( FrontLeftWheel.rpm * GearRatio[i] < MaxEngineRPM ) {
                AppropriateGear = i;
                break;
            }
        }

        CurrentGear = AppropriateGear;
    }

    if ( EngineRPM <= MinEngineRPM ) {
        AppropriateGear = CurrentGear;

        for ( var j = GearRatio.length-1; j >= 0; j -- ) {
            if ( FrontLeftWheel.rpm * GearRatio[j] > MinEngineRPM ) {
                AppropriateGear = j;
                break;
            }
        }

        CurrentGear = AppropriateGear;
    }
}

function GetWaypoints ()
  {

    var potentialWaypoints : Array = waypointContainer.GetComponentsInChildren(Transform );
    waypoints = new Array();

    for ( var potentialWaypoint : Transform in potentialWaypoints )
     {
        if ( potentialWaypoint != waypointContainer.transform )
        {
            waypoints[ waypoints.length ] = potentialWaypoint;
        }
    }
}

function NavigateTowardsWaypoint () {

    var RelativeWaypointPosition : Vector3 = this.transform.InverseTransformPoint( Vector3(
                                                waypoints[currentWaypoint].position.x,
                                                transform.position.y,
                                                waypoints[currentWaypoint].position.z ) );




    inputSteer = RelativeWaypointPosition.x / RelativeWaypointPosition.magnitude;

    print(inputSteer);


    if ( Mathf.Abs( inputSteer ) <  0.5 ) {
        inputTorque = RelativeWaypointPosition.y / RelativeWaypointPosition.magnitude - Mathf.Abs( inputSteer );
       
    }else{
        inputTorque = 0.0;
    }


    if ( RelativeWaypointPosition.magnitude < 20 ) {
        currentWaypoint ++;

        if ( currentWaypoint >= waypoints.length ) {
            currentWaypoint = 0;
        }
    }

}


please help me :)
Posted
Updated 16-Jan-14 21:19pm
v2

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900