Autor Tema: [UNITY] Arquitectura basada en entidades  (Leído 1578 veces)

JaviCepa

  • Socio
  • Mega Jammer
  • ****
  • Mensajes: 433
  • Molas: 45
    • @JaviCepa
[UNITY] Arquitectura basada en entidades
« en: 30 de Julio de 2015, 04:43:50 pm »
Me he cruzado con este tipo de arquitectura+framework para Unity. Aquí os dejo un video explicándolo:


El framework:
https://github.com/sschmid/Entitas-CSharp

JuDelCo

  • En evolución
  • Socio
  • Super Jammer
  • ***
  • Mensajes: 240
  • Molas: 35
  • The Game
    • Twitter
Re:[UNITY] Arquitectura basada en entidades
« Respuesta #1 en: 30 de Julio de 2015, 05:34:43 pm »
Mmm tiene buena pinta, pero a primera vista (desde mi desconocimiento de Unity) sólo me ha parecido un wrapper a la funcionalidad actual con una sintaxis más "fluida" así como la incorporación de pools de objetos y métodos para filtrar/buscar colecciones de objetos, pero hasta que no vea el vídeo y investigue más a fondo...  :P

EDIT: Después de ver el vídeo me retracto totalmente de lo dicho y cabe decir que, pese a que todavía tengo que probarlo y ver si realmente va bien y no hay problemas, esta extensión es una joya para cualquier tipo de juego

JuDelCo

  • En evolución
  • Socio
  • Super Jammer
  • ***
  • Mensajes: 240
  • Molas: 35
  • The Game
    • Twitter
Re:[UNITY] Arquitectura basada en entidades
« Respuesta #2 en: 05 de Agosto de 2015, 12:33:11 am »
Después de darle vueltas al asunto, ya puedo hablar con más propiedad.

Este framework me recuerda totalmente al extinto (pero continuado) Artemis entity system framework (la página web original murió, así que pongo otra de un port basado en él http://thelinuxlich.github.io/artemis_CSharp/ )

En cuanto a este framework, lo veo genial a excepción de dos puntos:

- La generación automática de código solo funciona si todo el código de los Assets funciona correctamente y no existen errores. Es decir, si algun script no compila por algún motivo no puedes regenerar el código automático que ofrece el framework (un rollo si te habitúas a él). Esto no parece especialmente grave pero... ¿y si agregas por ejemplo una nueva propiedad a un componente? Al generar, los métodos para instanciar tales componentes requerirán ahora una variable más, haciendo que todo el código que instanciaba ese componente ahora sea erróneo y te restrinja regenerar hasta que arregles todo el código a mano (que puede ser poco o mucho).

- La idea del framework es separar datos de la lógica (y presentación). Esto quiere decir que todas las entidades y componentes son ajenas al sistema de entidades y componentes de Unity, por lo que no existe una integración 1:1 entre ambos sistemas. Una de las aproximaciones más comunes puede ser la de instanciar en ejecución OJO las entidades de unity en la escena según la lógica de los sistemas en el framework. Esto tiene la penalización de que pierdes todo el potencial del diseñador de escenas de Unity (quedaría inservible, ya que las escenas las estarías generando via scripts). Así que una solución a esto es crear la escena como siempre se ha hecho, a excepción de que los scripts de monobehaviour NO contengan NINGUNA lógica, solo datos. Luego habría que programarse parsers en los sistemas que te montes en el framework para "leer" la escena y generar entidades y componentes en él (y de paso linkear esos componentes con ellos, por lo que no tendrías que generar nuevas entidades de Unity). El problema de esta aproximación es que una vez en ejecución, no puedes controlar como un solo sistema desde el editor de escenas las entidades (por ejemplo si mueves un enemigo, estarías moviendo la entidad de Unity, el componente real no se enteraría, así que tendrías que buscarlo en el Debugger/listado de entidades que trae el framework y realizar los cambios allí, algo no muy "cómodo"). La otra contra es que por supuesto tendrás que programarte tu "parser" de escenas acorde a las necesidades de tu proyecto.

En definitiva, lo veo con mucho potencial (como para usarlo ya vaya) pero no es 100% perfecto ni mucho menos, aún le queda posibilitar una mejor integración con unity (entidades unity <-> entidades del framework) y externalizar el código que genera el código en un ejecutable aparte (que OJO, esto se puede hacer ya, tan solo hay que crearse un pequeño proyecto en C#, te compilas un programita a tu manera y luego lo ejecutas a placer según la configuración que le metas totalmente ajeno a los posibles errores de código que existan en ese momento en el proyecto de Unity).

Me voy a dormir, perdón por el tocho  ;)

JuDelCo

  • En evolución
  • Socio
  • Super Jammer
  • ***
  • Mensajes: 240
  • Molas: 35
  • The Game
    • Twitter
Re:[UNITY] Arquitectura basada en entidades
« Respuesta #3 en: 11 de Marzo de 2016, 09:22:56 pm »
Pues fijate tu si me ha gustado y lo veo tan potente (demostrado ya con mis experimentos y juegos) que he terminado haciendo un port a C++

https://github.com/JuDelCo/Entitas-Cpp


No es un juego, así que estas cosas no pueden ir a Itch.io, pero oye, tiene su curro  8)

josemwarrior

  • Socio
  • New Jammer
  • *
  • Mensajes: 26
  • Molas: 4
  • @josemwarrior
    • josemwarrior.com
Re:[UNITY] Arquitectura basada en entidades
« Respuesta #4 en: 12 de Marzo de 2016, 04:07:29 pm »
Pues fijate tu si me ha gustado y lo veo tan potente (demostrado ya con mis experimentos y juegos) que he terminado haciendo un port a C++

https://github.com/JuDelCo/Entitas-Cpp


No es un juego, así que estas cosas no pueden ir a Itch.io, pero oye, tiene su curro  8)

¿Que te dieron de comer de pequeño? jajajaaj joder vaya currazo