Je débute avec Unity, et j'ai suivi différents tutos (qui sont d'ailleurs très clairs et instructifs !!) présents sur ce site. Toutefois, je prends quelques petites libertés pendant les réalisations.
J'ai justement décidé de faire, dans le tuto FPS, des ennemis sous forme de robots à trois roues. Le seul problème arrive au moment où je décide de faire tourner les roues (pour que l'effet soit plus réaliste). En effet, certaines roues tournent, d'autres non, et je n'arrive pas à savoir pourquoi. J'ai pourtant repris le code qui était présent dans les premiers tutos pour débutants (rotation du palmier), mais j'ai du faire une erreur. Voici le code de mon script :
Code : Tout sélectionner
private var roue1:GameObject;
roue1=GameObject.Find("Roue1");
private var roue2:GameObject;
roue2=GameObject.Find("Roue2");
private var roue3:GameObject;
roue3=GameObject.Find("Roue3");
var points=100;
var hitPoints=20;//.....Points de vie de l'ennemi
var explosion:Transform;//.....Objet explosion
var tir1:Transform;
var tir2:Transform;
var missile:GameObject;
var isShooting=false;
var characterLayer:LayerMask;
var gravity=20;
private var player:GameObject;
player=GameObject.Find("Player");
var visionAngle:float=45;
var visionRange:float=100;
private var distanceToPlayer:float;
private var canSeePlayer:boolean=false;
var hit:RaycastHit;
function Update(){
seekPlayer();
}
function seekPlayer(){
directionToPlayer=player.transform.position-transform.position;
distanceToPlayer=Vector3.Distance(transform.position,player.transform.position);
var playerAngle=Vector3.Angle(directionToPlayer,transform.forward);
if((Mathf.Abs(playerAngle)<visionAngle && distanceToPlayer<visionRange)||canSeePlayer==true){
Physics.Linecast(transform.position,player.transform.position,hit,~characterLayer.value);
if (hit.collider.name==player.collider.name){
var moveDirection=transform.forward;
var tempRot=Quaternion.Slerp(transform.rotation,Quaternion.LookRotation(directionToPlayer),2*Time.deltaTime);
tempRot.x=0;
tempRot.z=0;
transform.rotation=tempRot;
canSeePlayer=true;
shootMissile();
moveRoue(roue1);
moveRoue(roue2);
moveRoue(roue3);
}
}
moveDirection.y-=gravity*Time.deltaTime;
var controller:CharacterController=GetComponent(CharacterController);
var flags=controller.Move(moveDirection*3*Time.deltaTime);
}
function makeDamage(damage:float){//.....Fonction de gestion des dommages de l'ennemi
hitPoints-=damage;//.....On déduit des points de vie la valeur damage
if (hitPoints<=0){//.....Si les points de vie sont inférieurs ou égauts à 0
Instantiate(explosion,transform.position,transform.rotation);//.....On instantie l'explosion
Camera.main.SendMessageUpwards("ApplyPoints",points,SendMessageOptions.DontRequireReceiver);
Destroy(gameObject);//.....On détruit l'objet ennemi
}
}
function shootMissile(){
if (isShooting==false){
isShooting=true;
Instantiate(missile,tir1.position,tir1.rotation);
Instantiate(missile,tir2.position,tir2.rotation);
yield WaitForSeconds(2);
isShooting=false;
}
}
function moveRoue(arg1:GameObject){
arg1.transform.Rotate(0,0,Time.deltaTime*80);
}