El principal "profesional" de Uinty3D es que es una locura rápida. No estoy hablando de rendimiento aquí, sino de velocidad de desarrollo. Tienes:
- Canalización de activos unificada. No es necesario perder tiempo en el subsistema de recursos, no hay rutinas de importación con errores para escribir y corregir: simplemente suelte un archivo en la carpeta, y funciona.
- Editor de nivel integrado. No es necesario gastar tiempo en herramientas de nivel: simplemente vaya directamente al negocio.
- Gran soporte de ajustes y depuración: todas sus variables de juego se muestran correctamente mientras juega, y también se pueden cambiar sobre la marcha, y todo esto sin escribir una sola línea de código. Pausa el juego en cualquier momento o recorre el código una declaración a la vez.
- Biblioteca bastante completa de componentes confeccionados. Representación, sonido, física, controles: ya se ha escrito una gran cantidad de código "repetitivo".
- Mono como host de guiones. Si bien uno puede discutir sobre los méritos de C # como lenguaje, la biblioteca de clases base de Mono ofrece una gran cantidad de funciones. Colecciones, E / S, subprocesos múltiples y LINQ increíblemente expresivo aceleran considerablemente el desarrollo.
Además, Unity3d es realmente bueno en múltiples plataformas. Por supuesto, no puede crear, digamos, un juego .exe de Windows y luego, mágicamente, "simplemente funciona" en el iPhone; pero Unity se acerca bastante a eso. Lo que se requiere es "ajustar" más que "portar".
Por supuesto, en algunos casos, Unity3D no es ideal. El modo multijugador de red integrado en Unity está bien para algunos juegos LAN peer-to-peer, pero cualquier cosa que requiera un servidor central requiere que escriba todo el código de red desde cero. El sistema GUI de Unity es bastante peculiar y lento, por lo que crear GUI complejas en el juego es una molestia. Sin embargo, todos los demás sistemas GUI de juegos que he visto también son dolorosos, por lo que el de Unity no es tan malo en general.
Y, por supuesto, Unity3D es un poco menos flexible que los "motores de juegos" como OGRE, que ofrecen solo una biblioteca / código fuente. Su rendimiento no es exactamente de primera categoría, y dado que solo tiene un entorno limitado de secuencias de comandos, no puede usar algunos hacks inteligentes de bajo nivel para mejorarlo. Por ejemplo, si el renderizador de árbol incorporado de Unity no lo satisface por alguna razón, no puede escribir el suyo propio (bueno, podría hacerlo, pero estaría funcionando a través de scripts y probablemente sea demasiado lento y demasiado complicado ) Aún así, es posible hacer casi cualquier cosa con Unity siempre que no te importe perder un poco de rendimiento.
Sin embargo, la "estafa" más grande de Unity3D es el control de fuente. Como ya se mencionó, el propio servidor de activos de Unity cuesta un centavo. Y apesta, muy, muy duro. Ni siquiera tiene ramificaciones. Mientras que Unity3D teóricamente admite sistemas SCM de terceros, usarlos también está en peligro. He visto que la configuración de importación cambia "mágicamente" después de la confirmación SVN, o los parámetros de todos los objetos desaparecen después de usar Perforce. Todo esto se puede solucionar, pero de todos modos, Unity3D + Control de fuente = dolor.
Entonces, para responder realmente a tu pregunta. Creo que Unity3D es uno de los mejores, si no el mejor, motor de juego para un "pequeño" juego. Especialmente en etapa de prototipo.
Dicho esto, si estamos hablando de un proyecto educativo, recomiendo no hacerlo. Para aprender cómo funcionan los juegos, es mejor escribir uno en el nivel más bajo posible. Los motores de juego son una gran herramienta; pero para usarlo para obtener las máximas ganancias, es necesario comprender cómo funcionan y por qué funcionan de esa manera. Y la mejor manera de aprender esto es escribir su propio motor de juego, incluso si al final resulta horrible.