Page 1 sur 1

[Résolu] Probleme Script pour tirer

Publié : 06 Avr 2015 17:32
par Lenrys
[delete]

Re: Probleme Script pour tirer

Publié : 07 Avr 2015 09:19
par boubouk50
C'est ton FireBack().
A chaque Update, il est appellé, donc une fois que le Yield a atteint ton fire_rate, alors il lâche la patate. Soit tu rajoutes un booléen pour encadrer le fireBack(), soit tu travailles avec un timer dans le Update au lieu d'une coroutine.

Re: Probleme Script pour tirer

Publié : 07 Avr 2015 15:57
par Lenrys
[delete]

Re: [Résolu] Probleme Script pour tirer

Publié : 07 Avr 2015 16:57
par boubouk50
Je rectifie tes propos, la fonction yield WaitForSeconds(delay) fonctionne comme il faut, c'est à dire elle attend le délai indiqué avant de continuer.
Ton erreur se situait à cette condition:

Code : Tout sélectionner

if ( Input.GetKey(KeyCode.Space) ) && (!can_fire)) || (!can_fire)
Qui n'est pas bonne puisqu'elle revient à dire: (démonstration logique: a.b+b = b.(a+1) = b avec ici b = !can_fire)

Code : Tout sélectionner

if (!can_fire)
Donc à chaque fois que tu n'auras pas le droit de tirer tu lanceras une coroutine qui attendra un certain délai avant de changer ta variable can_fire en vraie. Ce qui aura pour conséquence, si tu restes appuyer sur ta barre d'espace, de lancer une coroutine par Update() donc de maintenir à chaque frame la variable can_fire à vraie, donc de tirer continuellement en attendant que ces coroutines s'arrêtent.

C'est pour cela que tu avais que tu avais 2 solutions: limiter l'appel à fire_Back à une seule fois entre chaque tir soit faire un timer, comme tu l'as fait (bourrinement).
Dans la première solution, il te suffisait de la déclarer à la fin de Fire() et de l'enlever de l'Update().

Code : Tout sélectionner

function Update () {
   if(Input.GetKey(KeyCode.Space) && (can_fire)) {
      Fire();
   }
}

function Fire() {   
        var x = this.transform.position.x + 0.85;
        var y = this.transform.position.y;
        var z = this.transform.position.z;
        
        var instance : GameObject;
        instance = new Instantiate(bullet, Vector3(x,y,z), Quaternion.identity);
        
        can_fire = false;
        Fire_back();
}

Re: [Résolu] Probleme Script pour tirer

Publié : 07 Avr 2015 17:06
par boubouk50
Voilà un code optimisé (pas d'appel et de variables superflues). A tester quand même, je ne programme pas en UnityScript et je ne suis pas sur des constructeurs...

Code : Tout sélectionner

#pragma strict

var fire_rate : float;
var bullet : GameObject;
var timer : float;

fire_rate = 10f;
timer = 0f;

function Update () {
   
   if(Input.GetKey(KeyCode.Space) && timer <= 0f ) {
      Fire();
      timer = fire_rate;
   }
   timer -= Time.deltaTime;
}

function Fire() {
        var instance : GameObject = new Instantiate(bullet, transform.position + new Vector3(0.85f, 0f, 0f), Quaternion.identity);
}

Re: [Résolu] Probleme Script pour tirer

Publié : 07 Avr 2015 17:44
par Lenrys
[delete]