Prefiero C / C ++ sobre Unity y otras herramientas: ¿es una gran decepción para un desarrollador de juegos? [cerrado]

35

Tenemos un gran proyecto de juego usando Unity en la escuela. Hay 12 de nosotros trabajando en ello. Mi maestro parece estar convencido de que es una herramienta importante para enseñar a los estudiantes, ya que hace que los estudiantes miren desde el nivel superior hasta el nivel inferior.

Puedo entender su punto de vista, y me pregunto: ¿es la unidad un motor tan importante en las empresas de desarrollo de juegos? ¿Hay muchas compañías que lo usan porque no pueden permitirse el lujo de usar otra cosa? Él habla como Unity es un gran jugador en la creación de juegos, pero solo veo que encaja en pequeñas compañías de juegos independientes que quieren hacer un juego lo más rápido posible.

¿Crees que Unity es tan importante en la industria? ¿Pone en peligro el valor de las habilidades de C ++?

No es que no me guste Unity, es solo que no aprendo nada con él, prefiero lograr pequeños pasos con Ogre o SFML.

Además, también tenemos ejercicios de práctica en C ++, pero esos son solo prácticas con teoría, nada más.

jokoon
fuente
99
El objetivo de C ++ y OOP es la reutilización de objetos. La unidad es un excelente ejemplo de eso y de la portabilidad multiplataforma. Ofrecen todas las herramientas que necesitas para iniciar un juego en XBox, iPhone o Wii. ¿En serio me estás diciendo que prefieres volver a escribir todo eso en C ++ desde cero?
Stephen Furlani
2
Absolutamente no, eso no es lo que quiero decir. Solo digo que no me gustan los idiomas de recolección de basura con los que se envía, y también el hecho de que no puede cambiar el código ya que es propietario: no puede modificarlo tanto como puede modificar otro motor existente . Su punto es válido, pero si lo sigo, las compañías también pueden reutilizar su motor anterior en lugar de simplemente cambiar a Unity. Con Unity, te quedas con algo que realmente no puedes cambiar, eso siempre es la mayor decepción para mí cuando pienso en tales herramientas: un motor patentado no tiene ese problema.
jokoon
2
Bueno, puede cambiar Unity suponiendo que obtenga una licencia de origen (que es costosa, como la mayoría de las otras licencias de origen profesional). También se actualiza con bastante frecuencia, por lo que no es realmente estático en términos de conjunto de características.
Tetrad
Esta es básicamente una pregunta de "qué tecnología usar". También está más orientado a la discusión / opinión. Lamentablemente, no puedo votar para cerrar por segunda vez ...
bummzack

Respuestas:

34

La unidad es una solución perfectamente válida en este contexto. Imagine por un segundo tener 12 personas, la mayoría de las cuales todavía están en el proceso de aprender C ++, escribiendo una aplicación de juego grande y compleja usándola. En la cantidad de tiempo dedicado a la depuración solo, probablemente habrá podido escribir otro juego en Unity.

No digo que saber cómo usar C ++ no sea importante, lo es, especialmente si planeas unirte a la industria de los juegos 'mainstream'. Pero tal vez su instructor tenga razón en este caso: use este proyecto como una experiencia de aprendizaje sobre cómo pensar en la arquitectura de un juego y diviértase haciéndolo. En el proceso, intenta perfeccionar tus habilidades de C ++ usando ejercicios o incluso llegar a escribir pequeños juegos mientras tanto usando SFML o algún otro marco básico.

Cuando todo esté hecho, habrá aprendido mucho, probablemente se convertirá en un mejor programador, y su próximo proyecto puede abordarse en C ++ con mucha más confianza.

James
fuente
2
Curiosamente, hay escuelas que enseñan puramente C ++ y esperan que los estudiantes desarrollen un motor de juego completo y un juego desde cero a pesar de que todavía están en el proceso de aprender C ++. Por supuesto, la práctica de una habilidad es cómo la aprende (no clases magistrales y pequeños proyectos de tarea, por proyectos de semestre o año más largos), por eso dichas escuelas producen programadores de primer nivel. Programadores capaces de aprender herramientas como Unity muy rápidamente o cualquier otro motor. Es mejor obligar a los estudiantes a aprender las cosas difíciles, ya que las cosas fáciles no serán un problema después.
Sean Middleditch
No todo el desarrollo del juego es programación, y usar Unity no necesariamente "evita las cosas difíciles". Simplemente enfatiza diferentes cosas difíciles que implementar desde cero. Dio diseño más que programación. Si un juego se implementara desde cero, esperaría un "arte de programador" mucho más primitivo y sin personajes ni trama.
wrosecrans
43

La unidad está creciendo en popularidad en la industria, principalmente en compañías más pequeñas. Sin embargo, es un excelente ambiente de enseñanza. Es una herramienta de enseñanza importante, pero no particularmente común entre las empresas convencionales. Está bien que no lo prefieras.

Sin embargo, permítanme señalar algo aquí, ya que a menudo veo una confusión entre los estudiantes de programación. Las "habilidades C ++" no son muy útiles a largo plazo. Lo que debe buscar son "habilidades de programación" y "habilidades de diseño". Si comprende los conceptos del lenguaje de programación y cómo se combina un sistema de software, entonces el lenguaje realmente no importa. No me considero un desarrollador increíble, pero puedo aprender un nuevo lenguaje y producir código útil en uno o dos días, porque entiendo los fundamentos.

Learning Unity te hará mejor en C ++.

Gregory Avery-Weir
fuente
Gameforge y BigPoint son compañías líderes en el mundo y usan Unity :)
daemonfire300
1
+1 por ser una muy buena respuesta. Aprender -un- motor de juegos es algo muy importante para las escuelas porque el 99% del tiempo no lo harás desde cero. Poder sumergirse en un motor existente y reconocer las partes del mismo, discernir el flujo de datos y todo eso es algo muy clave. Como se mencionó anteriormente, el lenguaje no importa a pesar de ser C / C ++ el 99% del tiempo, pero ser capaz de comprender el motor, o más generalmente solo el código de otra persona, es una habilidad invaluable en cualquier campo de programación ... especialmente el tiempo crítico de alto estrés que es videojuegos :)
James
1
Estoy en desacuerdo con esta respuesta. Para mí hay diferencias entre los guionistas y los programadores. Los desarrolladores de Unity son programadores, los usuarios de Unity son scripters. El resultado es el mismo, hacen juegos, pero a la larga, usar Unity puede ser un problema. La industria de los juegos es rica y ahora permite herramientas como Unity, pero para mí es porque las computadoras son más rápidas. para que pueda arrojar una gran cantidad de código, funciona: la unidad está claramente diseñada para la velocidad de desarrollo, algo que al mercado le gusta por el dinero, pero no creo que sea una verdadera ventaja.
jokoon
14
jokoon: ¿Cuál es la diferencia entre scripting y programación? Un usuario avanzado de Unity escribe sombreadores, gestiona el orden de renderizado y escribe el código AI. Los "guiones" de Unity se compilan y se pueden ampliar con una codificación de bajo nivel honesta a la diosa si lo desea. Y una buena codificación de Unity sigue los mismos principios que una buena codificación que no es de Unity. No hay diferencia mágica entre los dos paradigmas.
Gregory Avery-Weir
9

¿Hay muchas compañías que lo usan porque no pueden permitirse el lujo de usar otra cosa?

Sí, pero "pagar" es mucho más que solo valores en dólares.

Sí, el conjunto de características que Unity Pro le ofrece al costo que cobran es ridículo, especialmente teniendo en cuenta el hecho de que son licencias de asiento en lugar de licencias por título.

Pero además de eso, es una herramienta realmente fácil de usar. No pasará tanto tiempo capacitando a artistas y diseñadores sobre cómo usar la tubería de arte. Es fácil decir "simplemente arrastre sus texturas y modelos y estarán listos.

Además de eso, es una de las pocas herramientas que realmente te permite hacer 3D en un navegador con algún tipo de regularidad. Admiten prácticamente todas las plataformas de sombreadores, desde funciones fijas hasta DX9 +, así como Mac y Windows. Esa tecnología por sí sola es invaluable si quieres apuntar al creciente mercado de "juegos basados ​​en navegador".

Desde el punto de vista de la programación, lo que obtienes de Unity es una sólida comprensión del diseño de componentes (en comparación con el rodamiento de tu propio motor C ++, que generalmente es demasiado pesado en el lado de la herencia), así como un entorno muy rápido y visual para probar fuera del código del juego. Es de esperar que aprenda buenas prácticas de diseño utilizando Unity, que puede asumir para futuros motores C ++.

Claro, está bien tener preferencia de un idioma sobre otro. Personalmente prefiero C # sobre C ++. Pero el lenguaje que usa realmente depende de los requisitos del proyecto más que cualquier otra cosa. Los desarrolladores realmente no pueden darse el lujo de ser fanáticos, ya que no desea excluirse del mercado porque no le gustan las herramientas o el lenguaje por una razón u otra.

Además, una vez que realmente aprendes un segundo idioma, puedes ver que en su mayoría solo se trata de aprender nuevas sintaxis y paradigmas, y realmente no es tan difícil, por lo general, agregar nuevas herramientas a tu cinturón de herramientas. Sí, debe aprender y comprender C ++, pero a un alto nivel primero debe comprender un buen diseño.

Tétrada
fuente
aclaración: ¿Quiere decir que la licencia de Unity Pro vale la pena en comparación con la antigua Unity? Tu comentario fue un poco confuso para mí.
Kyle C
77
No he usado el gratuito, solo que la licencia de $ 1500 / asiento es muy barata en comparación con otras licencias comerciales de motores.
Tetrad
Por el momento no hay problema al usar la versión gratuita, solo hay restricciones menores.
XandruCea
9

El problema central, por lo que puedo ver, no es C ++ o Unity3D, sino que necesita una solución de alto nivel o una solución de bajo nivel .

Una solución de bajo nivel es aquella que se ensucia con los procesos de entrega de entrada, administración de memoria o carga de los modelos. Una solución de alto nivel es que obtienes un paquete ordenado, como Unity3D.

Para mí, si usar Unity3D (o cualquier otro motor de juego) o C ++ depende de los objetivos de su juego y proyecto.

  • Use Unity3D, si el tiempo de desarrollo tiene que ser rápido y / o su juego no requiere un alto rendimiento o no está en el extremo superior del rendimiento gráfico / computacional. Si desea concentrarse en el juego y las herramientas predeterminadas que proporciona Unity3D están bien, puede considerar usar Unity3D

  • C ++ con otras bibliotecas, si tiene más tiempo de desarrollo, el juego requiere más potencia computacional / gráfica, o emplea alguna tecnología que Unity3D no puede incorporar.

Lo bueno de Unity3D es que todavía emplea lenguajes de script que reflejan el desarrollo del mundo real (C # o JavaScript). Los conceptos de ingeniería de software y OOP que aprende (Singletons, fachada, máquinas de estado, decoradores, composición) se pueden aplicar en Unity3D. Ayuda a cuidar los procesos de corte de cookies, como la gestión de recursos, el gráfico de escenas, la carga de modelos, el renderizado, el almacenamiento de escenas, etc. Aún mejor, si hay una funcionalidad que necesita que Unity3D no proporciona, puede hacerlo Codificación DLL.

¿Dónde deja eso a C ++? C ++ es un lenguaje, y hay muchos conceptos de programación que puede hacer en C ++ que puede hacer en Unity3D, sin administración de memoria o quizás plantillas (con Unity 3.2, las especificaciones del lenguaje han mejorado para cubrir los cierres, por ejemplo).

Entonces, como he dicho, no es realmente C ++ vs. Unity3D. Es más de "C ++ plus bibliotecas / SDK o rodar su propio motor" frente a Unity3D. Depende de tus metas y objetivos. Para juegos de gama alta o juegos en los que necesita control sobre la canalización o entrada de renderizado, es posible que desee usar C ++ más un motor que le permite meterse bajo el capó. Si no, voy con Unity3D como mi opción predeterminada para los juegos 3D.

Sin embargo, el conocimiento con Unity3d no está bajo la experiencia del capó, pero es un buen lugar para comenzar a aprender el proceso general de desarrollo de juegos. Por ejemplo, probablemente necesitará un semestre de estudio para escribir un renderizador y cargar un modelo en OpenGL, además de una escena básica y una entrada. Lo haces en Unity3D en menos de un día.

Extrakun
fuente
o trabaja con Ogre3d!
jokoon
La última vez que trabajo con Ogre3D fue hace mucho tiempo; Creo que requiere más trabajo que Unity3D para poner en marcha un juego, y es un buen término medio para echar un vistazo a cómo funcionan las cosas bajo el capó.
Extrakun
+1 en este. No puedes preferir C / C ++ y Unity per se porque es una cosa de manzanas y naranjas. Sin embargo, lo que puede preferir es la idea de trabajar en el nivel inferior de desarrollo proporcionado por C / C ++, o en el desarrollo de nivel superior que permite la Unidad.
Tim Holt
8

No, Unity3D no pone en peligro las habilidades de C ++. De hecho, conocer C ++ es mucho más importante para un programador de juegos.

Unity3D es una herramienta realmente genial para el desarrollo de juegos. Realmente me gusta, y lo recomendaría para casi cualquier juego, especialmente para equipos pequeños. Pero Unity3D en sí está escrito en C ++; y tienes que saber C ++ (y también un montón de otras cosas de bajo nivel) para entender realmente cómo funciona.

Incluso si usa Unity3D, solo las habilidades de C ++ y la comprensión de bajo nivel de los principios y algoritmos involucrados le permitirán usarlo en todo su potencial. Esto también se aplica a otros motores de juego, por cierto.

Y para hacer un trabajo realmente bueno, para exprimir hasta el último rendimiento de su plataforma de elección y abarcar tantos efectos y algoritmos de última generación como sea posible, no puede usar nada más que C / C ++. Con pedazos de ensamblador, probablemente.

No importa
fuente
Esta es la respuesta que estaba esperando para +1:]
Notabene
3

Por lo que puedo decir, depende de su plataforma de destino, los juegos AAA y los juegos de consola (XBOX, Wii, etc.) generalmente estarán en C ++ para obtener el máximo rendimiento, sin embargo, si está escribiendo un juego basado en navegador, Unity también es frecuente usado.

Sin embargo, en cuanto a su pregunta, creo que tiene que ver simplemente con que herramientas como Unity le brinden un gran marco estandarizado para trabajar, que en un proyecto de medio año puede marcar la diferencia entre un prototipo medio horneado y un juego bastante desarrollado.

Elva
fuente
3

Asistí al Programa de Maestría en Computación Gráfica y Tecnología de Juegos de la Universidad de Pensilvania, donde realizamos todos nuestros proyectos en los niveles más bajos, con proyectos en C ++, OpenGL, CUDA, etc. Nuestros proyectos incluyeron animación basada en la física, animación de personajes arquitectónicos y IK, que representa varias formas de curvas de Bezier ... ya sabes, cosas realmente básicas que aprovechan la experiencia en programación, álgebra lineal y cálculo.

Luego, descargué Unity y descubrí que todo lo que trabajé para crear estaba embotellado en esta suite gratuita que cualquiera puede usar.

¿Estaba molesto por eso? Un poco, lo admito, pero descubrí que tener esa comprensión de la escuela me hace mucho más peligroso cuando utilizo herramientas como Unity. Actualmente trabajo en juegos, donde llevamos los juegos desde el concepto al mercado en menos de un año, y sigo siendo el tipo de referencia cuando se trata de "esas cosas de matemáticas". Mi consejo para ti es pasar por los movimientos; serás absolutamente invaluable cuando ingreses a la industria.

mseltzer
fuente
Podrías (en teoría) sacarle una insignia . :)
Cyclops
No hay necroing aquí, porque las preguntas no envejecen y "mueren" como en los foros. :) Las respuestas tardías siempre están bien.
doppelgreener
0

Puede que tarde en responder, pero esto ayudará a algunas de las personas que tienen esta confusión.

Inicialmente soy un programador de c ++, que solía odiar el uso de motores de terceros (por ejemplo, la unidad), ya que no siento que haya mucho proceso de aprendizaje involucrado en términos de programación de bajo nivel.

Después de intentar la unidad, me encontré con las siguientes cosas que es imprescindible para un desarrollador de juegos: aquí no enumero específicamente a la unidad, sino que enumero las ventajas de ir en perspectiva de ALTO NIVEL.

  1. Comprender cómo diseñar a alto nivel es más importante que preocuparse por las optimizaciones de bajo nivel.
  2. Los motores que tienen un sistema de arquitectura Entity (arquitectura basada en componentes) ayudarán a aprender cómo exactamente será útil esta arquitectura.
  3. Conocerá la última tecnología (al menos la terminología) y al menos estará al día con la industria con respecto a los gráficos. ¡Esta es la razón principal por la que elijo probar la unidad!
  4. Salteando el tiempo gastando en diferentes herramientas de importación de recursos (por supuesto, todavía me encantará escribir mis propios importadores 3D en c ++, ya que será más divertido en el tiempo libre)

Arriba están algunas de las razones para elegir un motor de alto nivel. Pero al mismo tiempo, no debe dejar de aprender C ++, ya que es el idioma más necesario y útil para un desarrollador de juegos perfecto.

Primero entienda la visualización en el alto nivel y haga algunos prototipos rápidos con Unity y use esa experiencia en el diseño de un buen juego en c ++.

Pronto volveré a c ++ ya que había ganado una buena experiencia en un nivel superior con la unidad :)

¡Buena suerte!

Ayyappa
fuente