voilà je viens à vous car j'ai un souci au niveau de mon code pour faire mon intelligence artificielle sur une voiture dans Unity 3D (version 4.3.2).
Voilà mon code dans un premier temps:
Code : Tout sélectionner
var PathPoint: Transform[];
var path: Transform[];
var speedIA: float = 50;
var CarIA: GameObject;
private var currentPathPoint: int;
static var minutesIA: int;
static var secondesIA: int;
static var centiemeIA: int;
static var timeIA: float;
static var timeTour1IA: float;
static var timeTour2IA: float;
static var countTourIA: int;
var ActiveNombreTourIA: GameObject;
var departIA: boolean;
var wheelFR: WheelCollider;
var wheelFL: WheelCollider;
var wheelBR: WheelCollider;
var wheelBL: WheelCollider;
var wheelFRtrans: Transform;
var wheelFLtrans: Transform;
var wheelBRtrans: Transform;
var wheelBLtrans: Transform;
var maxSpeedForSteerAngle : float = 150.0;
var steerAngleAtMaxSpeed : float = 10.0;
var steerAngleAtLowSpeed : float = 25.0;
function Start()
{
departIA = false;
countTourIA = 0;
StartFollowPath();
}
function Awake()
{
PathPoint[0] = transform;
}
function Update()
{
IAdepart();
RegardIa();
}
function OnTriggerEnter(other: Collider)
{
if(other.gameObject.tag == "NombreTourIA")
{
countTourIA++;
other.gameObject.SetActive(false);
if(countTourIA == 2)
{
timeTour1IA = timeIA;
}
if(countTourIA == 3)
{
timeTour2IA = timeIA - timeTour1IA;
}
}
if(other.gameObject.tag == "ActiveNombreTourIA")
{
ActiveNombreTourIA.gameObject.SetActive(true);
}
}
function IAdepart()
{
if(CarController.depart == true)
{
departIA = true;
}
if(departIA)
{
// timer IA
speedIA = 50f;
timeIA = timeIA + 1 * Time.deltaTime;
minutesIA = timeIA / 60;
secondesIA = timeIA % 60;
centiemeIA = (timeIA*100)%100;
//vitesse voiture IA en fonction de la difficulté.
/*if(NiveauxDifficulte.difficulty == 1)
{
speedIA = 18;
}
else if(NiveauxDifficulte.difficulty == 2)
{
speedIA = 20;
}
else if(NiveauxDifficulte.difficulty == 3)
{
speedIA = 22;
}*/
}
if(!departIA)
{
speedIA = 0f;
}
}
function RegardIa()
{
// mouvement roues
var zone: Vector3 = PathPoint[currentPathPoint].position;
var velocity = rigidbody.velocity;
wheelFLtrans.Rotate(wheelFL.rpm/60*360*Time.deltaTime, 0, 0);
wheelFRtrans.Rotate(wheelFR.rpm/60*360*Time.deltaTime, 0, 0);
wheelBLtrans.Rotate(wheelBL.rpm/60*360*Time.deltaTime, 0, 0);
wheelBRtrans.Rotate(wheelBR.rpm/60*360*Time.deltaTime, 0, 0);
wheelFRtrans.localEulerAngles.y = wheelFR.steerAngle - wheelFRtrans.localEulerAngles.z;
wheelFLtrans.localEulerAngles.y = wheelFL.steerAngle - wheelFLtrans.localEulerAngles.z;
//wheelFR.steerAngle = currentSteerAngle;
//wheelFL.steerAngle = currentSteerAngle;
var speedFactor = rigidbody.velocity.magnitude/maxSpeedForSteerAngle;
var currentSteerAngle = Mathf.Lerp(steerAngleAtLowSpeed, steerAngleAtMaxSpeed, speedFactor);
if(currentPathPoint < PathPoint.length)
{
// deplacement voiture
if((zone - transform.position).magnitude < 1)
{
currentPathPoint++;
}
}
else
{
if(1)
{
currentPathPoint = 0;
}
else
{
velocity = Vector3.zero;
}
}
rigidbody.velocity = velocity;
transform.LookAt(zone);
}
function StartFollowPath()
{
var ht : Hashtable = Hashtable();
ht.Add("path", path);
ht.Add("easetype", "linear");
ht.Add("speed", speedIA);
iTween.LookTo(CarIA, path, 2);
iTween.MoveTo(gameObject, ht);
}
Il me met une erreur pour mon LookTo que je ne comprend pas. Il me dit qu'il me faut une propriété looktarget mais meme avec la doc je ne comprend pas.
Grace a ma fonction RegardIA(), ma voiture regarde le prochain point mais elle tourne un peu trop brutalement.
Avez vous une solution? merci beaucoup. En esperant que ma question est compréhensible.