[Résolu] Probleme Script pour tirer
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
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
[Résolu] Probleme Script pour tirer
[delete]
Dernière édition par Lenrys le 25 Oct 2018 20:35, édité 2 fois.
- boubouk50
- ModoGenereux
- Messages : 6268
- Inscription : 28 Avr 2014 11:57
- Localisation : Saint-Didier-en-Bresse (71)
Re: Probleme Script pour tirer
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.
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
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation
Re: Probleme Script pour tirer
[delete]
Dernière édition par Lenrys le 25 Oct 2018 20:35, édité 1 fois.
- boubouk50
- ModoGenereux
- Messages : 6268
- Inscription : 28 Avr 2014 11:57
- Localisation : Saint-Didier-en-Bresse (71)
Re: [Résolu] Probleme Script pour tirer
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:
Qui n'est pas bonne puisqu'elle revient à dire: (démonstration logique: a.b+b = b.(a+1) = b avec ici b = !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().
Ton erreur se situait à cette condition:
Code : Tout sélectionner
if ( Input.GetKey(KeyCode.Space) ) && (!can_fire)) || (!can_fire)
Code : Tout sélectionner
if (!can_fire)
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
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation
- boubouk50
- ModoGenereux
- Messages : 6268
- Inscription : 28 Avr 2014 11:57
- Localisation : Saint-Didier-en-Bresse (71)
Re: [Résolu] Probleme Script pour tirer
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
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation