Topolino es una demo de un videojuego plataformas 3D. Realizado con el propósito de preparar una estructura base escalable y modular.
El proyecto se gestiona mediante los siguientes módulos
Cualquier GameObject que tenga un Collisioner Handler implementará el sistema de colisiones. Este sistema se basa en que al detectar una colisión con otro gameObject se llama a interactuar a todos sus componentes que tengan la interfaz ICollisionable. Esto reduce las comprobaciones de colisiones ya que solo se harán en los objetos que necesiten saber si han colisionado con algo, y con una sola comprobación se aplicará en todos los sistemas que lo necesiten.
La entrada del jugador se realiza con el nuevo Input System (actualmente soporte para mando y teclado/ratón). El Character View Direction permite trasladar la dirección de la cámara (de Cinemachine) usando un GameObject (Orientation) de la escena.
Todo objeto que necesite implementar un sistema de vida se le asignará un Health System. Health Restorer y Damage Dealer permiten infringir curación y daño respectivamente utilizando el sistema de colisiones. Para presentar fácilmente la vida se puede vincular cualquier Health System a un Health Presenter, por ahora solo está contemplado el uso de barras de vida. Para bloquear al jugador cuando reciba daño está vinculado a un Health Impact On Movement.
Los teletransportes van vinculados en pares, el script principal que tienen es el Teleport Behaviour, para que un objeto pueda teletransportarse necesita tener un Collisioner Handler y un Teleportable. Para identificar la zona de colisión esta se detecta con Teleport Point Detection.
El movimiento del personaje con rigidbody se implementa mediante una máquina de estados. Character State Machine guarda todos los posibles estados y se encarga de aplicar la lógica del estado actual. Si bien se podría reagrupar de alguna forma más eficiente para no repetir alguna función, la elección ha sido para mejorar su legibilidad y posibilidad de cambiar algo específico a futuro. Los valores concretos de las físicas de cada personaje van descritos en un Scriptable Object, Character Settings. La implementación específica de cada estado son: Movimiento en tierra (Character Moving State), Caída (Character Falling State), Salto (Character Jumping State) y Deslizamiento (Character Sliding State). Dado a que la transición a Jumping implementa un Coyote time, este se describe en la Character State Base.
Un objeto que pueda gestionar interacciones con otros necesita llevar el componente Interaction System. Los objetos con los que podrá interactuar serán los que implementen la interfaz IInteractable. Para detectar las interacciones todos los objectos con los que se pueda interactuar tendrán el componente Interactable Base, este registrará las collisiones. Existen dos tipos, Holdable Interactable (el jugador podrá llevarlos en la mano) y Acces Comparison Type Checker Interactable (comprobará su condición con el objeto que lleve el jugador). Interaction System implementa dos entradas, un toque y botón mantenido. Resumiendo, un toque hace que cojas o interactues con el objeto, sosteniendo sueltas el objeto que lleves. Cuando el Interaction System interactue con un Interactable Base invocará su función OnAction, esta será recogida por la lógica específica del objeto. Por ahora un Mele Weapon Interactable Action (lógica de armas) y Key Lockable Action (lógica de objetos que se desbloquean). En el caso de los desbloqueos, está implementado el caso concreto de un puerta, Door Behaviour.
El script Power up tiene todos los ajustes básicos de un power up, por ahora solo está implementado el caso concreto de Health Power Up (cura)
El sistema de paneles permite utilizar una clase estática Panel Events, para invocar una llamada a los Panel Manager de la escena. El evento invocado tendrá como argumentos el identificador del panel. Si el panel Manager de la escena tiene en su listado de paneles alguno que tenga asociado este identificador a su Panel Data, se encargará de manejar el evento.
El acabado final del proyecto está en desarrollo, en esta demo se puede observar el correcto funcionamiento de los módulos desarrollados en una escena de prueba.
This site was created with the Nicepage