[Résolu] Probleme Script pour tirer

Pour les scripts écrits en Javascript (UnityScript). :!: Obsolète :!:
Règles du forum
Merci de respecter la NOMENCLATURE suivante pour vos TITRES de messages :

Commencez par le niveau de vos scripts
DB = Débutant
MY = Moyen
CF = Confirmé

Puis le domaine d'application
-RS = Réseau
-AL = Algorithmie

Exemple :

[DB-RS] Mouvement perso multijoueur
Lenrys
Messages : 5
Inscription : 18 Fév 2015 17:40

[Résolu] Probleme Script pour tirer

Message par Lenrys » 06 Avr 2015 17:32

[delete]
Dernière édition par Lenrys le 25 Oct 2018 20:35, édité 2 fois.

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6225
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: Probleme Script pour tirer

Message par boubouk50 » 07 Avr 2015 09:19

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.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Lenrys
Messages : 5
Inscription : 18 Fév 2015 17:40

Re: Probleme Script pour tirer

Message par Lenrys » 07 Avr 2015 15:57

[delete]
Dernière édition par Lenrys le 25 Oct 2018 20:35, édité 1 fois.

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6225
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: [Résolu] Probleme Script pour tirer

Message par boubouk50 » 07 Avr 2015 16:57

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();
}
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6225
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: [Résolu] Probleme Script pour tirer

Message par boubouk50 » 07 Avr 2015 17:06

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);
}
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Lenrys
Messages : 5
Inscription : 18 Fév 2015 17:40

Re: [Résolu] Probleme Script pour tirer

Message par Lenrys » 07 Avr 2015 17:44

[delete]

Verrouillé

Revenir vers « (Js) Javascript »