Suscríbete para no perderte - Eventos

Un enfoque de desarrollo impulsado por eventos le permite aislar naturalmente la implementación de la lógica empresarial de la aplicación de la interfaz de usuario. Como desarrollador más de Unity, demostraré todo en el contexto del desarrollo de un juego. En el último artículo, mostré cómo las máquinas de estados pueden organizar la lógica empresarial en forma de un sistema de estados con un comportamiento bien definido. Hoy me gustaría prestar atención a cómo el autómata debe interactuar con los objetos del juego y controlar el estado de la escena.





En los ejemplos del artículo sobre autómatas, utilicé la siguiente construcción:





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



Por la estructura de la llamada a la función, puede comprender que existe una clase de juego estática que proporciona acceso global a sus campos, lo cual es muy conveniente para proyectos de tamaño pequeño. A continuación se muestra parte de su contenido:





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



En estos ejemplos, puede ver algunas libertades en los detalles de implementación. Al escalar un proyecto, por ejemplo, tendrás que abandonar el contexto estático y, en base a la clase Game , implementar componentes, llamarlos pretenciosamente MonoBehaviourPro con una estructura similar para subsistemas complejos, y pasarlo como contexto al autómata. y los componentes de estos subsistemas. Estoy suavizando deliberadamente estas esquinas para una mejor claridad del ejemplo. Hoy veremos la clase con el sufrido nombre EventManager , ya que es una dependencia de ObservableData y sin ella no podemos seguir adelante. El enlace muestra la implementación completa de la clase EventManager., el principio de su funcionamiento es extremadamente simple. Mantenemos una lista de delegados con una firma arbitraria suscritos a eventos con una clave de cadena.





, 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, . .





Así, el autómata en el curso de su trabajo puede enviar eventos a los objetos que se suscriben a ellos a través del EventManager. En el próximo artículo, discutiré las capacidades proporcionadas por la clase ObservableData junto con las herramientas descritas.





Este artículo es el segundo de una serie:








All Articles