¿Cuáles son las ventajas y desventajas de Unity3D como opción para hacer juegos? [cerrado]

64

Estamos haciendo nuestro proyecto escolar con Unity3d, ya que estaban usando Shiva el año anterior (lo cual me parece horrible), y quería saber su punto de vista para esta herramienta.

Pros:

  • multiplataforma, incluso escuché que Google lo implementará en Chrome
  • Todo lo que necesitas está aquí
  • los lenguajes de script lo convierten en una buena opción para las personas que no están programando gurús

Contras:

  • multijugador?
  • propietario, usted es totalmente dependiente de la unidad y su límite y no puede extenderlo
  • es menos "hacer un juego desde cero"
  • C ++ hubiera sido algo genial

Realmente creo que este tipo de herramienta es interesante, pero ¿vale la pena usarlo en la escuela para un proyecto que involucra a más de 3 personas de programación? ¿Qué aprendemos realmente en términos de programación al usar este tipo de herramienta (estoy de acuerdo con python y js, pero odio C #)? Podríamos haber usado Ogre en su lugar, incluso si estuviéramos aprendiendo x directo a partir de enero ...

jokoon
fuente
Otra estafa sería que necesita estar familiarizado con el diseño / modelado 3D, pero otra mirada al sitio y este no parece ser el caso ... ya que los juegos en 2D son posibles
Johnny Quest
1
@Johnny Quest Simplemente no es para lo que estaba destinado, podría ser difícil de usar.
Spooks
77
'C ++ hubiera sido una cosa genial' - en serio, ¿qué? Escribir en C ++ es 'genial' ahora? Personalmente, odio el lenguaje (todo el tipeo, Python hasta el final: p), pero sin duda es una gran característica del lenguaje y una biblioteca inteligente.
El pato comunista
1
La unidad es un motor increíble, pero ... Algunas desventajas a tener en cuenta: 1) La unidad tiende a ser algo así como un cerdo de memoria. Se necesita más memoria de la que crees que debería; probablemente debido al almacenamiento en caché de cosas como texturas. Esto puede causar problemas de depuración e incluso errores de OOM en dispositivos móviles. 2) Los problemas de rendimiento pueden ser difíciles de localizar, abordar y corregir, ya que se trata de un cuadro negro (sin código fuente). Examina de cerca tus sombreadores y observa cómo manejas la escena.
milkplus
2
@milkplus: por eso creo que la unidad no es con lo que el estudiante debería aprender. ejemplo: estoy bien para enseñar a los estudiantes sobre programación, enseñándoles python al principio, pero en un momento u otro, tienes que enseñarles cómo funcionan las cosas de nivel, incluso lo básico. Las personas deben usar una herramienta cuando saben todo sobre lo que hace esa herramienta. Si no, es un desastre esperando que suceda. No siempre se puede justificar la cita de Knuth con algo tan complejo como la unidad.
jokoon

Respuestas:

66

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.

No importa
fuente
3
citaré "Canalización de activos unificada. No es necesario pasar 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".
nkint
77
y "La mayor" estafa "de Unity3D, sin embargo, es el control de fuente".
nkint
2
y "Dicho esto, si estamos hablando de un proyecto educativo, recomiendo no hacerlo".
nkint
Sobre su problema de "árbol gen". Creo que especialmente en C #, puede escribir un gen de árbol C ++, ponerlo en un .dll y tratarlo como c ++ administrado. Por lo tanto, puede acceder teóricamente a sus propios "arreglos del motor" en la unidad.
daemonfire300
Admito que el sistema Unity GUI 2.0 no es otra cosa que el sistema "renderizar rect con texto", pero es muy fácil de extender. Mire @AffinityUI u otros proyectos de Unity UI que sean muy livianos, de código abierto y hagan que el sistema UI valga la pena.
daemonfire300
28

Comenzaré comentando tu lista:

  • Las secuencias de comandos no son solo un beneficio para los no programadores. Ser un (buen) programador es más que solo saber un idioma, es saber cómo deconstruir problemas y pensar de una manera particular. Los lenguajes de secuencias de comandos pueden permitir que un programador aproveche esas habilidades de pensamiento crítico de orden superior para producir resultados más potentes e interesantes en menos tiempo del que podría necesitar para producir resultados equivalentes mientras se preocupa por los detalles de nivel inferior que algunos lenguajes (C ++ viene a la mente) fuerza en la imagen.

  • El soporte multijugador (o la falta del mismo) es solo un problema de una forma u otra si su proyecto lo necesita.

  • No veo cómo "propietario" es una estafa. Si se trata de un proyecto escolar, es probable que no quiera pasar tiempo pirateando la fuente del marco que usa, o cualquier otra cosa. Además, DirectX también es propietario.

  • No hay absolutamente nada de malo en usar marcos o herramientas de nivel superior como Unity. "Hacer un juego desde cero" no es un logro: ¿qué consideras exactamente "desde cero?" Seguirás utilizando la API de gráficos de otra persona. El tiempo de ejecución de otra persona (incluso C requiere una biblioteca de tiempo de ejecución). "Hacer un juego" es lo que gana respeto, no "hacer un juego sin usar herramientas útiles".

  • C ++ siendo una cosa "genial" es un poco subjetivo. El lenguaje es utilizado muy a menudo por profesionales de la industria, pero probablemente no por las razones que usted pensaría. Como idioma, está comenzando a mostrar su edad y puede ser extremadamente engorroso en comparación con las opciones más modernas. En cualquier caso, los idiomas son solo herramientas y un buen programador debería poder aprender otros nuevos con relativa facilidad.

La gran ventaja de usar Unity para su proyecto escolar es que es un marco de alto nivel con una gran cantidad de trabajo de infraestructura ya implementado, esto le permitirá concentrarse en su juego y no en construir una base. Presumiblemente, tiene una ventana relativamente limitada para producir este juego, de modo que cuanto más aproveche las herramientas existentes, más tiempo tendrá para producir lógica o activos que son específicos de su juego y harán que su juego se vea y se sienta más completo: hay una curva de aprendizaje para Unity, pero terminas con mucho más a tu disposición mucho más rápido.

Una desventaja es que potencialmente está dedicando tiempo a aprender una herramienta específica que involucra conocimiento que podría no ser transferible, especialmente si decide que el flujo de trabajo y el entorno de Unity simplemente no son para usted y no desea volver a usarlo. . Además, Unity no tiene el flujo de trabajo 2D más obvio : está muy centrado en los juegos 3D, lo que implica toda la sobrecarga en activos artísticos. Pero creo que, para un proyecto escolar como el que estás describiendo, Unity es una muy buena opción.

Josh
fuente
13
Citaré "Hacer un juego" es lo que gana respeto, no "hacer un juego sin usar herramientas útiles".
nkint
2
"No hay absolutamente nada de malo en usar marcos o herramientas de alto nivel como Unity". Hacer un juego desde cero "no es un logro. ¿Qué es exactamente lo que consideras" desde cero? No hay absolutamente nada malo, pero llega a cuenta que las personas que crean nuevas tecnologías van tan bajo nivel como sea posible, por ejemplo, Uncharted 2 hasta usaron una casa en la API de gráficos modificado.
concept3D
1
Cualquier desarrollador que desee estar a la vanguardia absoluta de los gráficos por computadora deberá centrarse en el nivel más bajo y hacer su propio motor con su juego; pero esto es aproximadamente el 1% de todos los desarrolladores de juegos, parece. Si una empresa estaba haciendo un juego tan avanzado como Uncharted 1, en el momento en que salió Uncharted 3, probablemente podrían usar algún marco existente (no necesariamente Unity). La pregunta es: ¿estás creando Uncharted 4?
Katana314
9

Un problema importante con Unity es el control de fuente. Si no está trabajando en un equipo, esto no va a importar tanto (posiblemente), pero es probable que ese no sea el caso.

Puede usar Unity Asset Server, pero eso requiere 1) Unity Pro ($ 1500) y 2) una Licencia de servidor de activos por puesto ($ 500). Supongo que puede obtener algún tipo de descuento educativo, pero no es gratis.

Alternativamente, puede usar algo como SVN con Unity. Para soportarlo correctamente, todavía necesita Unity Pro.

Realmente no puede simplemente verificar una versión no profesional de Unity en SVN y esperar que funcione sin problemas. Su mecanismo para vincular GUID a activos, etc., no es exactamente seguro para SCM.


La funcionalidad multijugador es bastante decente, aunque para ser honesto, no he enviado un juego con él. En teoría, solo debe adjuntar vistas de red a las cosas y decirle lo que desea serializar para configurar la replicación correctamente. A partir de ahí, es necesario trabajar en la interfaz de usuario para conectarse a otros pares y configurar. Sin embargo, es principalmente de igual a igual. Es posible que pueda hacer la programación cliente / servidor ejecutando la unidad en modo sin cabeza, pero no me he metido con eso. Pero hacer que la persona A corra por la pantalla de la persona B es bastante fácil y rápido de hacer.

También C # es positivo en lo que a mí respecta. LINQ es súper expresivo. Tiene un manejo adecuado de excepciones y recolección de basura. Tiene paradigmas mucho más modernos como delegados, lambdas, interfaces y mejor soporte genérico que C ++. ( Editar : esto es obviamente controvertido. Mi punto es que C # no es un mal lenguaje. No quiero entrar en un largo debate sobre los pros y los contras del lenguaje vs. C ++).

Sin embargo, lo más positivo del uso de Unity es probablemente la línea de arte. Puede tomar un archivo PSD o Max (suponiendo que tenga instalado 3ds max) en la carpeta y se importa.

Tétrada
fuente
3
@DeadMG, sí, muy bien en realidad. Sí, sé sobre boost, metaprogramación de plantillas, etc. Pero creo que C # es un lenguaje más moderno.
Tetrad
3
@DeadMG Creo que el punto es que C # es extremadamente suave para muchos casos de uso que C ++ deja mucho que desear. No es que C ++ no pueda hacer esas cosas.
Nate
3
La única cosa en su lista con la que podría estar en desacuerdo fue "un mejor soporte genérico que C ++".
Kylotan
1
@Kylotan "para (vector <vector <int>> :: iterator iterator = score.begin (); iterator! = Score.end (); iterator ++) {" VS "foreach (puntaje var en puntajes)" .. Sí, estoy con C #.
Katana314
3
@ Katana314 Por supuesto, en C ++ 11: for ( auto x : xs ).
Eric
6

Actualización: Unity ahora ofrece todas estas características incluso en la versión gratuita, por lo tanto, ignore la respuesta a continuación.


Algo que vale la pena señalar: si está utilizando la versión gratuita de Unity3D, no podrá utilizar varios efectos, incluidos los sombreadores de procesamiento posterior (como la floración) y, mucho más importante, las sombras dinámicas. Obviamente, estos no tendrán un gran efecto en el flujo de trabajo del proyecto, pero sí imponen restricciones sobre lo que se puede lograr de forma gratuita con el motor.

Michael Younkin
fuente
1
Esto ya no es preciso y debe actualizarse o eliminarse.
MichaelHouse
@ Byte56 Gracias. En el futuro, deberías poder actualizar tus publicaciones antiguas sin necesidad de dejar un comentario.
Michael Younkin
Estaba respondiendo a una marca para eliminar esta respuesta y no le sugería que la actualizara para decir que ya no es precisa. Le sugería que lo actualizara para que fuera preciso o que lo eliminara. Esta respuesta no responde actualmente a los pros y los contras de Unity 3D como una opción. Sin embargo, estoy seguro de que puedes encontrar una manera de guardarlo. (Puede actualizarlo para incluir todas las características que Unity ahora proporciona y las que no ofrecen de forma gratuita).
MichaelHouse
3

La respuesta de Nevermind cubre las cosas bastante a fondo, pero solo para contribuir al lado del control de la fuente de las cosas, en realidad no es tan terrible una vez que aprendes a buscar un puñado de trucos:

  • En primer lugar, sí, Asset Server es costoso y bastante horrible para todos, excepto para el uso básico. Su mayor beneficio se está integrando en Unity, y si bien es valioso por su facilidad de uso y vale la pena en proyectos más simples, para cualquier cosa más grande (que normalmente serían los proyectos con presupuesto para AS) simplemente no es lo suficientemente flexible.
  • Pasando al control de versiones externo, es importante darse cuenta de que los Meta Files deben tratarse como cualquier otro activo y siempre deben agregarse / actualizarse en el control de versiones. No hacer esto es probablemente lo que sucedió en el escenario de la desaparición de la configuración de Nevermind.
  • Finalmente, al trabajar con cualquier sistema de control de versiones en Unity (incluido Asset Server), la comunicación del equipo se vuelve esencial cuando se trabaja con activos binarios para evitar pisotear el trabajo de los demás.

En caso de que quiera más detalles sobre estos puntos, publiqué hace un tiempo sobre el uso de git con Unity basado en mi experiencia en algunos proyectos de Unity bastante grandes: http://goo.gl/ivJVR

FlintZA
fuente
Ok, wow, disculpa el necropost. ¡Acabo de notar que esto fue preguntado (y respondido) en 2011! Lo agregué porque apareció en el boletín de noticias stackexchange gamedev esta semana .
FlintZA 01 de
No hay tal cosa como "necro" en SE. Caso en cuestión, mi comentario. : P
Cypher
2

Realmente. Multijugador es compatible. Es simplemente una cuestión de elegir un servidor que desea ejecutar su juego.

El más popular en el mercado ahora es "SmartFox Server", que ofrecen algunos paquetes diferentes, todos los cuales son gratuitos (hasta cierto punto). Solo es gratis si planeas tener una cierta cantidad de jugadores, ya que cada paquete permite una cierta cantidad de jugadores "gratis".

Si elige actualizar, el precio es bastante elevado para un desarrollador independiente. Entonces ... A la larga, si tienes muchos jugadores en tu servidor, entonces tendrás que cobrar por tu juego en lugar de cargarlo en sitios como Download.com como un juego completo gratuito. Esto puede no ser un problema para algunos, pero la mayoría de nosotros no puede pagar $ 2,500 de su bolsillo por un servidor.

Por ejemplo: SmartFox pro permite 20 jugadores gratis. Si desea actualizar, le costará 500 euros, que es un poco más en EE. UU., Alrededor de 600-700, y que permite 100 conexiones.

La próxima actualización es para la cantidad máxima de jugadores de 500, y es de 1000 euros, pero ... No tienes que pagar los 1000, pagas la diferencia.

Por lo tanto, tendrá que pagar solo 500 euros más, en lugar de los 1000 totales. Las últimas actualizaciones admiten una cantidad ilimitada de conexiones, por 2.000 euros. Que es casi $ 3,000 US.

Entonces, si actualiza desde las 500 conexiones, paga 1000 euros, si actualiza desde 100 conexiones, paga 1,5000 euros y, por supuesto, 2,000 euros para actualizar de forma gratuita.

Además, este servidor es muy fácil de configurar con Unity y hay numerosos videos tutoriales sobre cómo hacerlo exactamente en Youtube.

Ambo100
fuente
Trabajé extensamente con SmartFox Server desde 2005, y es genial. Muy estable y maduro.
PippoApps.com