Abonnez-vous pour ne pas manquer - Événements

Une approche de développement événementiel permet d'isoler naturellement la mise en œuvre de la logique métier de l'application de l'interface utilisateur. En tant que développeur plus Unity, je vais tout démontrer dans le contexte d'un développement de jeu. Dans le dernier article, j'ai montré comment les machines d'état peuvent organiser la logique métier sous la forme d'un système d'état avec un comportement bien défini. Aujourd'hui, je voudrais faire attention à la façon dont l'automate doit interagir avec les objets du jeu et contrôler l'état de la scène.





Dans les exemples de l'article sur les automates, j'ai utilisé la construction suivante :





Game.Event.Invoke("joystick_updated", input);
      
      



Par la structure de l'appel de fonction, vous pouvez comprendre qu'il existe une classe Game statique qui fournit un accès global à ses champs, ce qui est très pratique pour les projets de petite taille. Voici une partie de son contenu :





public static class Game
{
    public static FSM Fsm = new FSM();
    public static EventManager Event = new EventManager();   
    public static ObservableData Data = new ObservableData();
...
      
      



Dans ces exemples, vous pouvez voir certaines libertés dans les détails d'implémentation. Lors de la mise à l'échelle d'un projet, par exemple, vous devrez abandonner le contexte statique et, sur la base de la classe Game , implémenter des composants, les appeler avec prétention MonoBehaviourPro avec une structure similaire pour les sous-systèmes complexes, et le passer comme contexte à l'automate et les composants de ces sous-systèmes. Je lisse délibérément ces coins pour une meilleure clarté de l'exemple. Aujourd'hui, nous allons examiner la classe portant le nom de longue date EventManager , car il s'agit d'une dépendance ObservableData et sans elle, nous ne pouvons pas continuer. Le lien montre l'implémentation complète de la classe EventManager., le principe de son fonctionnement est extrêmement simple. Nous gardons une liste de délégués avec une signature arbitraire souscrits aux événements avec une clé de chaîne.





, Generic-, Type safety. , . , , EventManager binds binds_global . , Unity. , , . , . Awake OnDestroy. binds, . . , , - . , " " , Global.





, EventManager c 5 :






        public void Bind<T>(string name, Action<T> ev)
        public void BindGlobal<T>(string name, Action<T> ev)
        public void Unbind<T>(string name, Action<T> ev)
        public void UnbindGlobal<T>(string name, Action<T> ev)
          
        public void Bind(string name, Action ev)
        public void BindGlobal(string name, Action ev)
        public void Unbind(string name, Action ev)
        public void UnbindGlobal(string name, Action ev)
          
        public void Invoke<T>(string name, T arg)
          
        public void Invoke(string name)
      
      



. . FSM , , EventManager , , ( MonoBehaviourPro, PlayerController, , SPlayerDriving , , , SPlayerClimbing, , , . , ). , SWin level_done, , , .





, , - , , , - PlayerPrefs, . .





Ainsi, l'automate au cours de son travail peut envoyer des événements aux objets qui y sont abonnés via l' EventManager. Dans le prochain article, je discuterai des capacités fournies par la classe ObservableData en conjonction avec les outils décrits.





Cet article est le deuxième d'une série :








All Articles