[RESOLU] Timer dans une classe non MonoBehavior

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
Alzahel
Messages : 3
Inscription : 10 Déc 2019 14:48

[RESOLU] Timer dans une classe non MonoBehavior

Message par Alzahel » 10 Déc 2019 15:11

Bonjour,

Je rencontre actuellement une difficulté pour réaliser un Timer dans mon jeu.
Pour le contexte : J’ai des sorts donc une classe Spell en abstract faite comme ceci :

& des classes enfants qui héritent de cette classe pour créer mes sorts.
Par exemple une classe :

Code : Tout sélectionner

 
 public class Heal() :
name = “Heal”
Sprite = sprite du sort de heal
selfTarget = true

void use(target)
{
	target.currentHealth += 10;
}
Donc ça c’est ok ça marche bien.

Le problème c’est que j’aimerai donc faire des sorts avec un timer comme par exemple un sort Freeze, qui ralentit l’ennemi pendant x secondes avant de s’annuler.
Le problème étant que comme la classe Spell et donc la classe enfant Freeze ne sont pas des monobehaviour, je ne sais pas comment faire un timer dedans ?
J’ai essayé mais alors ça faisait pause sur tout mon jeu pendant le temps du timer…

C’est un peu une question “nulle” mais je suis débutant et je n’ai pas trouvé la solution…

Merci d’avance à ceux qui prendront le temps de m’aider !

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

Re: Timer dans une classe non MonoBehavior

Message par boubouk50 » 10 Déc 2019 15:53

Peut-être est-ce tout simplement un problème d'architecture de code plutôt que du code lui-même.
Pourquoi ne pas définir une classe Monobehaviour qui sera appelée par le Spell par exemple?
Pourquoi le temps de freeze doit-il faire le timer alors qu'il pourrait être fait sur le gameObject (donc Monobehaviour) qui est affecté?
Pourquoi ne pas dériver de Monobehaviour?

viewtopic.php?t=14349 ?
"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

Alzahel
Messages : 3
Inscription : 10 Déc 2019 14:48

Re: Timer dans une classe non MonoBehavior

Message par Alzahel » 10 Déc 2019 18:13

Hello boubouk,

Alors pour la solution 1 c'est plus ou moins ce que je pense faire, je vais essayer.
Pour la 2 c'est simplement que je trouve ça plus propre d'avoir tout le comportement du sort dans le sort lui même plutôt que d'en sortir des bouts dans mon character contrôler ce qui serait bizarre, sachant qu'en plus tous les sorts n'ont pas un timer.

Et dériver de monobehaviour il me semble pas qu'il soit possible d'instancier un monobevabiour or je créé des instance de mes sorts, dis moi si j'ai tort ?

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

Re: Timer dans une classe non MonoBehavior

Message par boubouk50 » 11 Déc 2019 09:26

Entre le sort qui freeze un ennemi et l'ennemi qui est freezé par un sort, il n'y a pas beaucoup de différence.
Un component pourrait gérer cela: freezer un ennemi reviendrait à lui ajouter un component Monobehaviour qui l'empêcherai de bouger pendant x secondes avant de s'auto-détruire.

On ne peut effectivement pas instancier un Monobehaviour.
"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

Alzahel
Messages : 3
Inscription : 10 Déc 2019 14:48

Re: Timer dans une classe non MonoBehavior

Message par Alzahel » 11 Déc 2019 18:03

boubouk50 a écrit :
11 Déc 2019 09:26
Entre le sort qui freeze un ennemi et l'ennemi qui est freezé par un sort, il n'y a pas beaucoup de différence.
Un component pourrait gérer cela: freezer un ennemi reviendrait à lui ajouter un component Monobehaviour qui l'empêcherai de bouger pendant x secondes avant de s'auto-détruire.

On ne peut effectivement pas instancier un Monobehaviour.
Bonjour Boubouk ! J'ai résolu le souci en utilisant plus ou moins cette solution ! Quand mon sort touche un ennemi je lui ajoute un Timer avec un event c# onEnd, j'ai ensuite mit un listener dans ma classe de sort qui appel la méthode pour dégeler l'ennemi.
Tout simple au final, j'ai des notions de base en programmation et je n'avais jamais utilisé les events, ce fut un bon exercice :-D

Merci à toi et bonne fin de journée.

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

Re: [RESOLU] Timer dans une classe non MonoBehavior

Message par boubouk50 » 12 Déc 2019 09:21

Nickel.

Pense à passer le sujet en résolu lorsque la solution est trouvée.
Il suffit juste d'éditer le premier message et d'ajouter [RESOLU] en début d'i-celui.

bonne journée
"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

Répondre

Revenir vers « Scripting »