Problème simulation voiture

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
Avatar de l’utilisateur
Neoboby
Messages : 25
Inscription : 31 Août 2010 21:04
Localisation : Beauvais (60)
Contact :

Problème simulation voiture

Message par Neoboby » 03 Sep 2010 20:31

Salut à tous !
Bon je travail doucement sur la simulation physique d'une voiture à l'aide d'Unity, j'ai trouver divers tutoriaux anglais, mais aucun ne m'aide vraiment car ils ont tous rattaché du son ou autre connerie à leurs code ce qui les rends pas très lisible !

Et comme unity dispose d'un exportateur version Web pourquoi ne pas s'en servir ? :D

Donc mon problème c'est de gérer les déplacements de la voitures !
J'ai donc assigné 4 Collider à chacune des roues, et je fais varier "MotorTorque" des WheelCollider pour déplacer le véhicule. Sauf que je dois avoir un petit soucis dans mes calcules mathématique, car ma voiture dès qu'elle croise une bosse s'envole vers la lune .... pas top :(

breff voici la démo pour que vous puissiez voir un peu de quoi je parle:
http://indistrib.fr/unity/webbuggy.html

Et puis voici mon script de géstion de déplacement de la voiture en espérant que quelqu'un puisse me dépanner :oops: merci d'avance !

Code : Tout sélectionner

// Script controle du Buggy

//  On défini les WheelCollider
var FrontLeftWheel  : WheelCollider;
var FrontRightWheel : WheelCollider;
var BackLeftWheel  : WheelCollider;
var BackRightWheel : WheelCollider;

// Particules pour le pot d'échappement
var PotEchappement1 : ParticleEmitter;
var PotEchappement2 : ParticleEmitter;

// Variable boite de vitesse
var GearRatio : float[];
var CurrentGear : int = 0;

// Variables Moteurs
var CentreGravite : float = 0.0;
var AngleBraquage : float = 0.0;
var EngineTorque : float = 600.0;
var MaxEngineRPM : float = 3000.0;
var MinEngineRPM : float = 1000.0;

private var EngineRPM : float = 0.0;

// Variables suspensions
var SuspensionDistance : float = 0.2;
var RoueMass : float = 1;
var GlissSuivit : float = 0.15;
var GlissCote : float = 0.22;




function Start () {
	// On défini le centre gravité du buggy
	rigidbody.centerOfMass.y = CentreGravite ;
}

function Update () {
	
	
	// ************************************* Paramètre physique des coliders de Roues *************************
	BackLeftWheel.suspensionDistance = SuspensionDistance ;
	
	// On défini la vitesse max
	rigidbody.drag = rigidbody.velocity.magnitude / 250;
	
	// On gère la rotation du régime moteur en fonction de la rotation des roues de la vitesse choisi
	EngineRPM = (FrontLeftWheel.rpm + FrontRightWheel.rpm)/2 * GearRatio[CurrentGear];
	ShiftGears();

	// set the audio pitch to the percentage of RPM to the maximum RPM plus one, this makes the sound play
	// up to twice it's pitch, where it will suddenly drop when it switches gears.
					audio.pitch = Mathf.Abs(EngineRPM / MaxEngineRPM) * 4.0 +1 ;
// if (Input.GetKey("up")){

	if (EngineRPM<700 ){
			PotEchappement1.maxSize =0.8  ; } else {
			PotEchappement1.maxSize =0.2  ;}
// }
	// Déplacement de la voiture en fonction de la puissance que recoivent les colliders de roue

	//			FrontLeftWheel.motorTorque = EngineTorque / GearRatio[CurrentGear] * Input.GetAxis("Vertical");
	//			FrontRightWheel.motorTorque = EngineTorque / GearRatio[CurrentGear] * Input.GetAxis("Vertical");
				BackLeftWheel.motorTorque = EngineTorque / GearRatio[CurrentGear] * Input.GetAxis("Vertical");
				BackRightWheel.motorTorque = EngineTorque / GearRatio[CurrentGear] * Input.GetAxis("Vertical");

		//		BackLeftWheel.motorTorque = 450;
		//		BackRightWheel.motorTorque = 450;
	
	
	// On gère la rotation des roues avant pour tourner
	FrontLeftWheel.steerAngle = AngleBraquage * Input.GetAxis("Horizontal");
	FrontRightWheel.steerAngle = AngleBraquage * Input.GetAxis("Horizontal");
	
	// frein à main
		if( Input.GetKey("space") ) {
		FrontRightWheel.brakeTorque = FrontLeftWheel.brakeTorque = 100;
		BackRightWheel.brakeTorque = BackLeftWheel.brakeTorque = 200; }	else	{
		FrontRightWheel.brakeTorque = FrontLeftWheel.brakeTorque = 0;
		BackRightWheel.brakeTorque = BackLeftWheel.brakeTorque = 0;}
}

function ShiftGears() {
// Fonction qui gère la vitesse (de la boite de vitesse) en fonction du régime moteur
	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;
	}
}


***************************
Cordialement,

Neoboby
www.ai-beauvaisis.fr

djulio74
Messages : 682
Inscription : 19 Déc 2009 22:55

Re: Problème simulation voiture

Message par djulio74 » 03 Sep 2010 22:27

salut!
bon déjà un petit "soucis" qui ne concerne pas ton problème d'envolée sauvage.. ton centre de gravité a l'aire trop bas, quand tu tourne a droite par exemple, on a l'impression que la caisse vire comme une moto vers l'intérieur du virage au lieu de l'inverse (les suspensions a l'extérieur du virage doivent se comprimer et non se détendre..

après pour l'envolée, t'a déjà essayé de prendre un bosse pareille avec une voiture?! :?: c'est un peu normal selon moi la réaction.. si t'arrive a fond sur une bosse qui fait plus de 100% de pente, normal que tu t'envoles :mrgreen:

sinon ton code je l'ai déjà vu! :mrgreen: je suis passé par le même tuto et j'utilise le même code mais en essayant de le retravailler..

apres pour ton code, je vois que tu défini le SuspensionDistance pour ta roue arrière gauche seulement...
Et pourquoi ton frein a main agit sur les roues arrières ET avant?!

bon suitage!!

______________________________________________________________
\_______________________ Impossible is nothing _______________________/

Avatar de l’utilisateur
Neoboby
Messages : 25
Inscription : 31 Août 2010 21:04
Localisation : Beauvais (60)
Contact :

Re: Problème simulation voiture

Message par Neoboby » 04 Sep 2010 00:20

Merci d'avoir jetté un oeil sur mon truc !
Alors bah oui le code obligé de repprendre un tuto pour apprendre les base d'un langage après y a juste à améliorer :D

Pour le centre de gravité si je le place plus haut le voiture fais des wooling ... si je le met à zero comme là, bah ca agit bizare ... si je met trop bas la voiture fais des saltos ... :(

Après je pense que c'est au niveau du code que sa merde ... faudrais que ej trouve un autre code (lisible) pour comparer comment sa fonctionne, niveau de la distribution de force au niveau des roues et centre de gravité

concernant les suspension, oui en fait avant de poster j'ai nettoyer le code pour qu'il soit lisible, et j'ai du supprimer une ligne :D donc faut pas s'inquiéter lol

Sinon toi tu gère comment ta voiture ? même principe ou tu rend sa plus complexe ?
Cordialement,

Neoboby
www.ai-beauvaisis.fr

djulio74
Messages : 682
Inscription : 19 Déc 2009 22:55

Re: Problème simulation voiture

Message par djulio74 » 04 Sep 2010 00:39

moi mon code pour le contrôle de la voiture ressemble un peu au tiens :

Code : Tout sélectionner

var avg : WheelCollider;
var avd : WheelCollider;
var arg : WheelCollider;
var ard : WheelCollider;

var GearRatio : float[];
var CurrentGear : int = 0;
var  Torque  = 600;
var MaxEngineRPM : float = 5500.0;
private var EngineRPM : float = 0.0;

function Start () {
	rigidbody.centerOfMass.y = -0.47;
}
function Update () {
			EngineRPM = Mathf.Clamp( (arg.rpm+ard.rpm+avd.rpm+avg.rpm)/4* GearRatio[CurrentGear],0,MaxEngineRPM+800);
			EngineTorque = (Mathf.Abs((1-Mathf.Exp(-EngineRPM+500/MaxEngineRPM))*Torque+80));
			
			Speed = ( avg.rpm +avd.rpm + arg.rpm + ard.rpm)/4*0.13;

			Accel = Mathf.Clamp(Input.GetAxis("Vertical"),0,1);

			Brake =-300*Mathf.Clamp(Input.GetAxis("Vertical"),-1,0);
			Direction = Input.GetAxis("Horizontal");
			FreinMain = 1000*Input.GetAxis("Fire1");
			
			
			rigidbody.drag = (rigidbody.velocity.magnitude /50);
			audio.pitch = Mathf.Abs(EngineRPM / 5500*3) +0.5 ;
		
			avg.steerAngle = 20 * Direction;
			avd.steerAngle = 20 * Direction;
			
			avg.motorTorque = avd.motorTorque = ard.motorTorque = arg.motorTorque =  Accel * Torque;			
			
			ard.brakeTorque =arg.brakeTorque =  Brake + FreinMain ;
			avd.brakeTorque =avg.brakeTorque = Brake;
			
print(rigidbody.velocity.magnitude);
	
		if ( audio.pitch > 7.0 ) {
			audio.pitch = 7.0;
		}
	
	ShiftGears();

}

function ShiftGears() {
	Descente  = 2000+Input.GetAxis("Vertical")*1500;
	
	if ( EngineRPM >= MaxEngineRPM  ) {
		var AppropriateGear : int = CurrentGear;
		
		for ( var i = 0; i < GearRatio.length; i ++ ) {
			if ( arg.rpm * GearRatio[i] < MaxEngineRPM) {
				AppropriateGear = i;
				break;
			}
		}
		
		CurrentGear = AppropriateGear;
	}
	
	if ( EngineRPM <= Descente ) {
		AppropriateGear = CurrentGear;
		
		for ( var j = GearRatio.length-1; j >= 0; j -- ) {
			if ( arg.rpm * GearRatio[j] > Descente ) {
				AppropriateGear = j;
				break;
			}
		}
		CurrentGear = AppropriateGear;
	}
}
et j'ai fait un bout de code pour contrôler le "WheelFrictionCurve" :

Code : Tout sélectionner

var avg : WheelCollider;
var avd : WheelCollider;
var arg : WheelCollider;
var ard : WheelCollider;

var ForExtSlip = 1.00;
var ForExtValue = 20000.00;
var ForAsySlip = 2.00;
var ForAsyValue = 50000.00;
var ForFactor = 0.1;

var SideExtSlip = 1.00;
var SideExtValue = 20000.00;
var SideAsySlip = 2.00;
var SideAsyValue = 10000.00;
var SideFactor = 0.015;



function Update () {
arg.forwardFriction.extremumSlip = ard.forwardFriction.extremumSlip =avg.forwardFriction.extremumSlip =avd.forwardFriction.extremumSlip =ForExtSlip;
arg.forwardFriction.extremumValue = ard.forwardFriction.extremumValue = avg.forwardFriction.extremumValue = avd.forwardFriction.extremumValue = ForExtValue;
arg.forwardFriction.asymptoteSlip = ard.forwardFriction.asymptoteSlip = avg.forwardFriction.asymptoteSlip = avd.forwardFriction.asymptoteSlip = ForAsySlip;
arg.forwardFriction.asymptoteValue = ard.forwardFriction.asymptoteValue = avg.forwardFriction.asymptoteValue = avd.forwardFriction.asymptoteValue = ForAsyValue;
arg.forwardFriction.stiffness = ard.forwardFriction.stiffness = avg.forwardFriction.stiffness = avd.forwardFriction.stiffness = ForFactor;


arg.sidewaysFriction.extremumSlip = ard.sidewaysFriction.extremumSlip = avg.sidewaysFriction.extremumSlip = avd.sidewaysFriction.extremumSlip = SideExtSlip;
arg.sidewaysFriction.extremumValue = ard.sidewaysFriction.extremumValue = avg.sidewaysFriction.extremumValue = avd.sidewaysFriction.extremumValue = SideExtValue;
arg.sidewaysFriction.asymptoteSlip = ard.sidewaysFriction.asymptoteSlip = avg.sidewaysFriction.asymptoteSlip = avd.sidewaysFriction.asymptoteSlip = SideAsySlip;
arg.sidewaysFriction.asymptoteValue = ard.sidewaysFriction.asymptoteValue = avg.sidewaysFriction.asymptoteValue = avd.sidewaysFriction.asymptoteValue = SideAsyValue;
arg.sidewaysFriction.stiffness = ard.sidewaysFriction.stiffness = avg.sidewaysFriction.stiffness = avd.sidewaysFriction.stiffness = SideFactor;


var hit : WheelHit;

if( avg.GetGroundHit( hit ) ) {
print (hit.forwardSlip);
}

}
bon ça fait très patté!! :? mais c'est pour éviter de changer les valeur a chaque fois dans les 4 WheelColliders..
et en affichant le hit.forwardSlip ou hit.sidewaysSlip j'essaye de faire des mesures..
et j'ai enfin trouvé comment fonctionne cette fameuse courbe qui régi le comportement de la voiture (si elle glisse ou pas) et a quoi correspondent ces valeurs et pourquoi et comment les "ajuster" (surtout en fonction de la puissance de la voiture)!!

d'ailleurs c'est pour ça que ta voiture par en vrille si tu tourne trop (avec un centre de gravité plus haut), c'est parce que t'a trop d'accroche au sol, et au moment critique, au lieu de décrocher (déraper) ta roue restent accrochées au pavé et du coup val-ding dans le décors...

remonte un peu ton centre de gravité, et essaye de baisser le stifness Factor (dans Sideways Friction) dans les donnée de tes wheelColliders...mais pas trop après tu va tout le temps déraper... :mrgreen:
ensuite, c'est pas ton code qui est a l'origine des saut trop haut, mais seulement le décors et la vitesse a laquelle on arrive sur les reliefs.

EDIT : ah pis pour "régler" les suspension, faut faire des tests, genre tu fais des dos d'âne, et tu regarde comment ça réagit. genre avec un cylindre d'un mettre de diamètre, placé a l'horizontal, tu le fait dépasser petit a petit du sol et tu roule dessus (a fond ou moins) et tu regarde la comportement de la voiture.je pense que tu peut faire dépasser le cylindre d'environ 10cm et passer a fond dessus sans que la voiture vole en allant a fond. si la voiture s'envole, baisse un peut les spring et damping ans les paramètres ..

______________________________________________________________
\_______________________ Impossible is nothing _______________________/

Avatar de l’utilisateur
Neoboby
Messages : 25
Inscription : 31 Août 2010 21:04
Localisation : Beauvais (60)
Contact :

Re: Problème simulation voiture

Message par Neoboby » 04 Sep 2010 03:17

J'ai un peu bidouiller ton code pour la gestion du centre de gravité, je pense qu'à vue de nez en valeur on as un peu de mal à juger d'où il doit être, j'ai vu dans d'autres code que les gens utilisaients des ObjectVide pour positionner leurs centre de graviter, donc voilà, en gros tu créér un object vide tu le position à peut près au centre de graviter de la voiture, puis tu créer une fonction qui te défini le centre de gravite :

voilà le code :

Code : Tout sélectionner

  var avg : WheelCollider;
var avd : WheelCollider;
var arg : WheelCollider;
var ard : WheelCollider;

var GearRatio : float[];
var CurrentGear : int = 0;
var  Torque  = 600;
var MaxEngineRPM : float = 5500.0;
private var EngineRPM : float = 0.0;

// Variable du centre de gravité
var centerOfMass : Transform;

function Start () {
//	rigidbody.centerOfMass.Vector3 = CentreGravite ;
// On renvoie vers la fonction de gestion du centre de gravité
SetupCenterOfMass();
	
}

// fonction du centre de graviter, qui va le positionner par rapport aux trois axes et non que de celui y
function SetupCenterOfMass()
{
	if(centerOfMass != null)
		rigidbody.centerOfMass = centerOfMass.localPosition;
}

function Update () {
         EngineRPM = Mathf.Clamp( (arg.rpm+ard.rpm+avd.rpm+avg.rpm)/4* GearRatio[CurrentGear],0,MaxEngineRPM+800);
         EngineTorque = (Mathf.Abs((1-Mathf.Exp(-EngineRPM+500/MaxEngineRPM))*Torque+80));
         
         Speed = ( avg.rpm +avd.rpm + arg.rpm + ard.rpm)/4*0.13;

         Accel = Mathf.Clamp(Input.GetAxis("Vertical"),0,1);

         Brake =-300*Mathf.Clamp(Input.GetAxis("Vertical"),-1,0);
         Direction = Input.GetAxis("Horizontal");
         FreinMain = 1000*Input.GetAxis("Fire1");
         
         
         rigidbody.drag = (rigidbody.velocity.magnitude /50);
         audio.pitch = Mathf.Abs(EngineRPM / 5500*3) +0.5 ;
      
         avg.steerAngle = 20 * Direction;
         avd.steerAngle = 20 * Direction;
         
         avg.motorTorque = avd.motorTorque = ard.motorTorque = arg.motorTorque =  Accel * Torque;         
         
         ard.brakeTorque =arg.brakeTorque =  Brake + FreinMain ;
         avd.brakeTorque =avg.brakeTorque = Brake;
         
print(rigidbody.velocity.magnitude);
   
      if ( audio.pitch > 7.0 ) {
         audio.pitch = 7.0;
      }
   
   ShiftGears();

}

function ShiftGears() {
   Descente  = 2000+Input.GetAxis("Vertical")*1500;
   
   if ( EngineRPM >= MaxEngineRPM  ) {
      var AppropriateGear : int = CurrentGear;
      
      for ( var i = 0; i < GearRatio.length; i ++ ) {
         if ( arg.rpm * GearRatio[i] < MaxEngineRPM) {
            AppropriateGear = i;
            break;
         }
      }
      
      CurrentGear = AppropriateGear;
   }
   
   if ( EngineRPM <= Descente ) {
      AppropriateGear = CurrentGear;
      
      for ( var j = GearRatio.length-1; j >= 0; j -- ) {
         if ( arg.rpm * GearRatio[j] > Descente ) {
            AppropriateGear = j;
            break;
         }
      }
      CurrentGear = AppropriateGear;
   }
}
J'ai modifié les coef de frottement, mais bon je suis obliger de les baisser a fond si je veux pas que ma voiture face des roues avant ... :(

Je vais regader sur d'autre code voir comment ils gèrent tout ca, mais je pense que le Centre de grav est bien gérer avec cette fonction, c'est ce qui va autour qui fonctionne pas bien, vais dormir là je repnd ca demain ou plus tard , merci encore de ton aide ;)

Neo.
Cordialement,

Neoboby
www.ai-beauvaisis.fr

DisTrash
Messages : 229
Inscription : 08 Déc 2009 15:02

Re: Problème simulation voiture

Message par DisTrash » 04 Sep 2010 15:32

Salut,


Neoboby de 3d-station ?


++
;) ;) ;)

Avatar de l’utilisateur
Neoboby
Messages : 25
Inscription : 31 Août 2010 21:04
Localisation : Beauvais (60)
Contact :

Re: Problème simulation voiture

Message par Neoboby » 05 Sep 2010 12:36

Ouais lui même en personne 8-)
Cordialement,

Neoboby
www.ai-beauvaisis.fr

DisTrash
Messages : 229
Inscription : 08 Déc 2009 15:02

Re: Problème simulation voiture

Message par DisTrash » 05 Sep 2010 14:01

héhé, bienvenue ici ;) ;) ;)


++
;)

djulio74
Messages : 682
Inscription : 19 Déc 2009 22:55

Re: Problème simulation voiture

Message par djulio74 » 05 Sep 2010 16:15

Mode HS on :
Dis DisTrash, il y en a beaucoup de la station ici? juste comme ça...
Mode HS off.

bon ça avance cette gestion de voiture ? t'en est ou?

______________________________________________________________
\_______________________ Impossible is nothing _______________________/

Avatar de l’utilisateur
Neoboby
Messages : 25
Inscription : 31 Août 2010 21:04
Localisation : Beauvais (60)
Contact :

Re: Problème simulation voiture

Message par Neoboby » 05 Sep 2010 19:50

Merci pour l'accueil !

Bon sinon j'en suis à que je reprend un peut tout depuis le début, j'essaie de calculer exactement la force que j'envoie à mes roues celon l'enfoncement de la pédalle d'accélérateur, du régime moteur et couple de boite !

breff là j'ai juste géré que quand on appuie sur Haut sa augmente le régime moteur sans dépasser la valeur max du régim moteur.
là je vais essayé de dégotter des cartographie de voiture pour essayer de comprendre quels sont les rapport entre boite de vitesse et le reste ! lol je suis pas sortie de l'auberge :D

sinon voilà mon début de code, sa affiche juste la valeur du régime moteur ... :(

Code : Tout sélectionner

// Script controle du Buggy


//  On défini les WheelCollider
var FrontLeftWheel  : WheelCollider;
var FrontRightWheel : WheelCollider;
var BackLeftWheel  : WheelCollider;
var BackRightWheel : WheelCollider;

// Particules pour le pot d'échappement
var PotEchappement1 : ParticleEmitter;
var PotEchappement2 : ParticleEmitter;

// Variable boite de vitesse
var GearRatio : float[];
var CurrentGear : int = 0;

// Variables Moteurs
var CentreGravite : float = 0.0;
var AngleBraquage : float = 0.0;
var EngineTorque : float = 600.0;
var MaxEngineRPM : float = 3000.0;
var MinEngineRPM : float = 1000.0;

private var EngineRPM : float = 0.0;

// Variables suspensions
var SuspensionDistance : float = 0.2;
var RoueMass : float = 1;
var GlissSuivit : float = 0.15;
var GlissCote : float = 0.22;

// Variables du moteur
var Acceleration = 0 ;
var AccelerationMax = 100;
var Ralentit = 900 ;
private var ToursMinutes = 0; 
var ToursMinutesMax = 8500;
private var VitesseBoite = 0;
var NbVitesseBoite = 5;

function Start () {
	// On défini le centre gravité du buggy
	rigidbody.centerOfMass.y = CentreGravite ;
}

function OnGUI() 
{ 
//   GUI.Label(Rect(0,0,100,100),GlissSuivit) ;
  print( " Vitesse " + VitesseBoite + "/" + NbVitesseBoite + " | Acceleration :"+Acceleration + " | ToursMinutes :"+ ToursMinutes); 
   
}

function Update () {
	
	
	// ************************************* Paramètre physique des coliders de Roues *************************
	BackLeftWheel.suspensionDistance = SuspensionDistance ;
	
	// On défini la vitesse max
	rigidbody.drag = rigidbody.velocity.magnitude / 250;
	
	// On gère la rotation du régime moteur en fonction de la rotation des roues de la vitesse choisi
	EngineRPM = (FrontLeftWheel.rpm + FrontRightWheel.rpm)/2 * GearRatio[CurrentGear];
	ShiftGears();

	// set the audio pitch to the percentage of RPM to the maximum RPM plus one, this makes the sound play
	// up to twice it's pitch, where it will suddenly drop when it switches gears.
					audio.pitch = Mathf.Abs(EngineRPM / MaxEngineRPM) * 4.0 +1 ;
// if (Input.GetKey("up")){

	if (EngineRPM<700 ){
			PotEchappement1.maxSize =0.8  ; } else {
			PotEchappement1.maxSize =0.2  ;}
// }
	// Déplacement de la voiture en fonction de la puissance que recoivent les colliders de roue

	//			FrontLeftWheel.motorTorque = EngineTorque / GearRatio[CurrentGear] * Input.GetAxis("Vertical");
	//			FrontRightWheel.motorTorque = EngineTorque / GearRatio[CurrentGear] * Input.GetAxis("Vertical");
	//			BackLeftWheel.motorTorque = EngineTorque / GearRatio[CurrentGear] * Input.GetAxis("Vertical");
	//			BackRightWheel.motorTorque = EngineTorque / GearRatio[CurrentGear] * Input.GetAxis("Vertical");

// ***************** gestion De l'accelerateur **************
if (Input.GetKey("up")) {
		if (Acceleration < AccelerationMax ) {
			Acceleration = Acceleration + 1 ;
		}
	} else {
	// Si Up =0 alors on décélère
		if (Acceleration > 0) {
				Acceleration = Acceleration - 1 ;
		}
}
//  ****** Tours par Minutes du moteur 
ToursMinutes = Ralentit + ( Acceleration * ( ( ToursMinutesMax - Ralentit)/ AccelerationMax) );

	
	// On gère la rotation des roues avant pour tourner
	FrontLeftWheel.steerAngle = AngleBraquage * Input.GetAxis("Horizontal");
	FrontRightWheel.steerAngle = AngleBraquage * Input.GetAxis("Horizontal");
	
	// frein à main
		if( Input.GetKey("space") ) {
		FrontRightWheel.brakeTorque = FrontLeftWheel.brakeTorque = 100;
		BackRightWheel.brakeTorque = BackLeftWheel.brakeTorque = 200; }	else	{
		FrontRightWheel.brakeTorque = FrontLeftWheel.brakeTorque = 0;
		BackRightWheel.brakeTorque = BackLeftWheel.brakeTorque = 0;}
}

function ShiftGears() {
// Fonction qui gère la vitesse (de la boite de vitesse) en fonction du régime moteur
	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;
	}
}





// ******************************************************************

Cordialement,

Neoboby
www.ai-beauvaisis.fr

Répondre

Revenir vers « Scripting »