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 ?
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 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;
}
}
***************************