Синтаксис:
Используется javascript
var FrontLeftWheel : WheelCollider;
var FrontRightWheel : WheelCollider;
var bsp : float;
var check : GameObject;
//;//bober
var GearRatio : float[];
var CurrentGear : int = 0;
static var dead : boolean = false;
var EngineTorque : float = 600.0;
var MaxEngineRPM : float = 3000.0;
var MinEngineRPM : float = 1000.0;
private var EngineRPM : float = 0.0;
private var waypoints : Array;
private var currentWaypoint : int = 0;
private var bober;
private var b2;
private var temp_position : Vector3;
private var speed2 : float;
static var steer : float;
var centerOfMass : Transform;
var wait_revers : int = 0;
var nazad : boolean = false;
private var RelativeWaypointPosition : Vector3;
private var STime : float = 0; //Vrema
private var inputSteer : float = 0.0;
private var inputTorque : float = 0.0;
private var sn : int = 0;
var waypointContainer: GameObject;
function Start () {
if(centerOfMass != null)
rigidbody.centerOfMass = centerOfMass.localPosition;
GetWaypoints();
}
function Update ()
{
STime+=Time.deltaTime;
rigidbody.drag = rigidbody.velocity.magnitude / 250;
NavigateTowardsWaypoint();
EngineRPM = (FrontLeftWheel.rpm + FrontRightWheel.rpm)/2 * GearRatio[CurrentGear];//bob abs
ShiftGears();
temp_position=transform.position;
audio.pitch = Mathf.Abs(EngineRPM / MaxEngineRPM) + 1.0 ;
if ( audio.pitch > 2.0 ) {
audio.pitch = 2.0;
}
FrontLeftWheel.motorTorque = EngineTorque / GearRatio[CurrentGear] * inputTorque;
bober=EngineTorque / GearRatio[CurrentGear] * inputTorque;
FrontRightWheel.motorTorque = EngineTorque / GearRatio[CurrentGear] * inputTorque;
FrontLeftWheel.steerAngle = Mathf.Min(50, 10 * inputSteer);
FrontRightWheel.steerAngle = Mathf.Max(-50,(Mathf.Min(50,10 * inputSteer)));
steer=Mathf.Max(-50,(Mathf.Min(50,10 * inputSteer)));
if (nazad == false){
check.transform.position.x = waypoints[currentWaypoint].position.x;
check.transform.position.z = waypoints[currentWaypoint].position.z;
}
else
{check.transform.position.x = transform.position.x + Mathf.Sin ((transform.eulerAngles.y-180)/57.3)*100;
check.transform.position.z = transform.position.z + Mathf.Cos ((transform.eulerAngles.y-180)/57.3)*100;
};
//Поворот колёс
FrontLeftWheel.transform.rotation = transform.rotation*Quaternion.Euler( 0, steer, 0 );
FrontRightWheel.transform.rotation = transform.rotation*Quaternion.Euler( 0, steer, 0 );
if (dead == true)
{
Destroy(gameObject);
};
}
function FixedUpdate ()
{//rigidbody.centerOfMass = centerOfMass.localPosition;
speed2=temp_position.z-transform.position.z;
if (speed2<0.001)
{wait_revers ++;
if (wait_revers > 35 && nazad == false)
{
nazad = true;
wait_revers=0;
}
}
else
{
wait_revers=0;
}
if (Mathf.Abs(speed2)>0.001) {wait_revers = 0; /*nazad = false;*/};
if (nazad == true) {sn++;};
if (sn > 50) {nazad = false; sn = 0;};
}
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;
}
CurrentGear = 1;
}
function GetWaypoints () {
//var waypointContainer = GameObject.Find("Waypoints1");
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 ()
{
if (nazad == false)
{
RelativeWaypointPosition = transform.InverseTransformPoint( Vector3(
waypoints[currentWaypoint].position.x,
transform.position.y,
waypoints[currentWaypoint].position.z ) );
//Ручник и пятак
if (speed2<0.05 || RelativeWaypointPosition.z < 0 )
{
if (inputSteer < -0.4){transform.eulerAngles.y-=1;};
if (inputSteer > 0.4) {transform.eulerAngles.y+=1;};
};
}
else
{RelativeWaypointPosition = transform.InverseTransformPoint( Vector3(
transform.position.x + Mathf.Sin ((transform.eulerAngles.y-180)/57.3)*100,
transform.position.y+1,
transform.position.z + Mathf.Cos ((transform.eulerAngles.y-180)/57.3)*100 ) );
};
//temp_position = RelativeWaypointPosition;
b2=RelativeWaypointPosition.z;
inputSteer = RelativeWaypointPosition.x / RelativeWaypointPosition.magnitude;
if ( Mathf.Abs( inputSteer ) < 0.5 && RelativeWaypointPosition.z>0) {
inputTorque = RelativeWaypointPosition.z / RelativeWaypointPosition.magnitude - Mathf.Abs( inputSteer );
}else
{
//inputTorque = 0;
if (nazad==true){
inputTorque = -1;
inputSteer=-inputSteer;
};
}
if (STime<3)
{inputTorque = 0;
nazad = false;
wait_revers = 0;
};
bsp=RelativeWaypointPosition.magnitude;
if ( RelativeWaypointPosition.magnitude < 20 ) {
currentWaypoint ++;
if ( currentWaypoint >= waypoints.length ) {
currentWaypoint = 0;
STime=-10000;
}
}
}
//function OnGUI()
// {
// GUI.Label( new Rect(90,100,180,20), "iSteer: "+inputSteer.ToString("f2"));
// GUI.Label( new Rect(90,140,180,20), "iTorque: "+inputTorque.ToString("f2"));
// GUI.Label( new Rect(90,160,180,20), "RWP.mag: "+bsp.ToString("f2"));
// GUI.Label( new Rect(90,180,180,20), "EngineRPM: "+EngineRPM.ToString("f2"));
// GUI.Label( new Rect(90,200,180,20), "motorTorque: "+bober.ToString("f2"));
// GUI.Label( new Rect(90,220,180,20), "RWPosition.z: "+b2.ToString("f2"));
// GUI.Label( new Rect(90,240,180,20), "speed: "+speed2.ToString("f2"));
// GUI.Label( new Rect(90,260,180,20), "currentWaypoint: "+currentWaypoint.ToString("f1"));
// }
var FrontRightWheel : WheelCollider;
var bsp : float;
var check : GameObject;
//;//bober
var GearRatio : float[];
var CurrentGear : int = 0;
static var dead : boolean = false;
var EngineTorque : float = 600.0;
var MaxEngineRPM : float = 3000.0;
var MinEngineRPM : float = 1000.0;
private var EngineRPM : float = 0.0;
private var waypoints : Array;
private var currentWaypoint : int = 0;
private var bober;
private var b2;
private var temp_position : Vector3;
private var speed2 : float;
static var steer : float;
var centerOfMass : Transform;
var wait_revers : int = 0;
var nazad : boolean = false;
private var RelativeWaypointPosition : Vector3;
private var STime : float = 0; //Vrema
private var inputSteer : float = 0.0;
private var inputTorque : float = 0.0;
private var sn : int = 0;
var waypointContainer: GameObject;
function Start () {
if(centerOfMass != null)
rigidbody.centerOfMass = centerOfMass.localPosition;
GetWaypoints();
}
function Update ()
{
STime+=Time.deltaTime;
rigidbody.drag = rigidbody.velocity.magnitude / 250;
NavigateTowardsWaypoint();
EngineRPM = (FrontLeftWheel.rpm + FrontRightWheel.rpm)/2 * GearRatio[CurrentGear];//bob abs
ShiftGears();
temp_position=transform.position;
audio.pitch = Mathf.Abs(EngineRPM / MaxEngineRPM) + 1.0 ;
if ( audio.pitch > 2.0 ) {
audio.pitch = 2.0;
}
FrontLeftWheel.motorTorque = EngineTorque / GearRatio[CurrentGear] * inputTorque;
bober=EngineTorque / GearRatio[CurrentGear] * inputTorque;
FrontRightWheel.motorTorque = EngineTorque / GearRatio[CurrentGear] * inputTorque;
FrontLeftWheel.steerAngle = Mathf.Min(50, 10 * inputSteer);
FrontRightWheel.steerAngle = Mathf.Max(-50,(Mathf.Min(50,10 * inputSteer)));
steer=Mathf.Max(-50,(Mathf.Min(50,10 * inputSteer)));
if (nazad == false){
check.transform.position.x = waypoints[currentWaypoint].position.x;
check.transform.position.z = waypoints[currentWaypoint].position.z;
}
else
{check.transform.position.x = transform.position.x + Mathf.Sin ((transform.eulerAngles.y-180)/57.3)*100;
check.transform.position.z = transform.position.z + Mathf.Cos ((transform.eulerAngles.y-180)/57.3)*100;
};
//Поворот колёс
FrontLeftWheel.transform.rotation = transform.rotation*Quaternion.Euler( 0, steer, 0 );
FrontRightWheel.transform.rotation = transform.rotation*Quaternion.Euler( 0, steer, 0 );
if (dead == true)
{
Destroy(gameObject);
};
}
function FixedUpdate ()
{//rigidbody.centerOfMass = centerOfMass.localPosition;
speed2=temp_position.z-transform.position.z;
if (speed2<0.001)
{wait_revers ++;
if (wait_revers > 35 && nazad == false)
{
nazad = true;
wait_revers=0;
}
}
else
{
wait_revers=0;
}
if (Mathf.Abs(speed2)>0.001) {wait_revers = 0; /*nazad = false;*/};
if (nazad == true) {sn++;};
if (sn > 50) {nazad = false; sn = 0;};
}
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;
}
CurrentGear = 1;
}
function GetWaypoints () {
//var waypointContainer = GameObject.Find("Waypoints1");
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 ()
{
if (nazad == false)
{
RelativeWaypointPosition = transform.InverseTransformPoint( Vector3(
waypoints[currentWaypoint].position.x,
transform.position.y,
waypoints[currentWaypoint].position.z ) );
//Ручник и пятак
if (speed2<0.05 || RelativeWaypointPosition.z < 0 )
{
if (inputSteer < -0.4){transform.eulerAngles.y-=1;};
if (inputSteer > 0.4) {transform.eulerAngles.y+=1;};
};
}
else
{RelativeWaypointPosition = transform.InverseTransformPoint( Vector3(
transform.position.x + Mathf.Sin ((transform.eulerAngles.y-180)/57.3)*100,
transform.position.y+1,
transform.position.z + Mathf.Cos ((transform.eulerAngles.y-180)/57.3)*100 ) );
};
//temp_position = RelativeWaypointPosition;
b2=RelativeWaypointPosition.z;
inputSteer = RelativeWaypointPosition.x / RelativeWaypointPosition.magnitude;
if ( Mathf.Abs( inputSteer ) < 0.5 && RelativeWaypointPosition.z>0) {
inputTorque = RelativeWaypointPosition.z / RelativeWaypointPosition.magnitude - Mathf.Abs( inputSteer );
}else
{
//inputTorque = 0;
if (nazad==true){
inputTorque = -1;
inputSteer=-inputSteer;
};
}
if (STime<3)
{inputTorque = 0;
nazad = false;
wait_revers = 0;
};
bsp=RelativeWaypointPosition.magnitude;
if ( RelativeWaypointPosition.magnitude < 20 ) {
currentWaypoint ++;
if ( currentWaypoint >= waypoints.length ) {
currentWaypoint = 0;
STime=-10000;
}
}
}
//function OnGUI()
// {
// GUI.Label( new Rect(90,100,180,20), "iSteer: "+inputSteer.ToString("f2"));
// GUI.Label( new Rect(90,140,180,20), "iTorque: "+inputTorque.ToString("f2"));
// GUI.Label( new Rect(90,160,180,20), "RWP.mag: "+bsp.ToString("f2"));
// GUI.Label( new Rect(90,180,180,20), "EngineRPM: "+EngineRPM.ToString("f2"));
// GUI.Label( new Rect(90,200,180,20), "motorTorque: "+bober.ToString("f2"));
// GUI.Label( new Rect(90,220,180,20), "RWPosition.z: "+b2.ToString("f2"));
// GUI.Label( new Rect(90,240,180,20), "speed: "+speed2.ToString("f2"));
// GUI.Label( new Rect(90,260,180,20), "currentWaypoint: "+currentWaypoint.ToString("f1"));
// }
по идее машина должна ехать по масиву чекпинтов но почему то едет очень медлено тупо назад.кто может поможете отредактировать или подсказать в чем дело