Soy un joven programador independiente. Tengo muchas ganas de ser un desarrollador de juegos, pero odio usar motores como Unreal. ¿Que puedo hacer?

Estoy seguro de que habrá un montón de personas diciéndole que escriba su propio motor y todo el ruido.

Estoy en el otro campamento. Respire y aprenda a programar correctamente.

Utilicé irreal durante más de una década (comencé con UE2) y modifiqué algunos códigos del motor según sea necesario, aunque en su mayoría solo agrego variables adicionales y funciones / funciones abstractas en la clase de actor y luego permití que se propaguen. Claro, tengo una adición masiva de nodos para el sistema de animación y pocos sistemas clave como la localización.

Pero si estás haciendo un juego bastante básico y necesitas luchar contra el motor, entonces estás haciendo algo muy muy malo. Si iba a adivinar, supongo que realmente no entiendes cómo está estructurado el motor y cómo funciona realmente, así que estás tratando de hackear cómo crees que deberían funcionar las cosas y simplemente romper la mierda en todas partes.

Es difícil tener una conversación como esta con los escasos detalles. Sería realmente útil si publicara ejemplos de lo que estaba tratando de implementar, por qué el código nativo del motor no ayudó y lo que pensó que necesitaba hacer para solucionarlo. Básicamente, hizo una pregunta altamente técnica sin detalles técnicos, y como tal obtendrá respuestas muy generales que probablemente tengan poca utilidad.

Estuve por última vez en juegos ‘serios’ a fines de la década de 1990, usando C ++ para escribir bibliotecas de juego / matemáticas / física, mientras que otro desarrollador escribió gráficos / sombreadores / renderizado usando C.

Fue un trabajo increíblemente difícil. Ni siquiera competiría hoy. He visto juegos de JavaScript en mi teléfono Moto G (años) que se ven mejor.

El hecho simple es que, dado los juegos AAA de hoy, tienes cero posibilidades, en realidad cero, de poder emularlos por tu cuenta, en cualquier período de tiempo, si no usas motores y aprovechas las decenas de miles de horas de trabajo. involucrado.

No son solo horas hombre.

Pasar diez mil horas escribiendo su propio motor de renderizado es una cosa. ¿Pero puedes hacerlo?

¿Cómo están tus matemáticas? ¿Cuáles son las últimas técnicas de renderizado fotorrealistas?

Lo más probable es que su motor homebrew no sea tan bueno como Unity o Unreal.

Y una vez que lo construyes, lo más probable es que aún luches con las mismas cosas con las que luchas ahora. Seguirás programando para un motor con todas sus peculiaridades: la tuya. Y el personal de soporte está formado solo por usted.

No quiero desanimarte de ser un desarrollador de juegos, ¡adelante! Lo disfruté por un tiempo (aunque fue un trabajo muy duro).

Pero te disuadiré lo más fuertemente posible de intentar un enfoque de “hazlo solo desde el metal desnudo”.

Aproveche el trabajo experto de los demás tanto como pueda. Ya es bastante difícil hacer un juego atractivo como es.

Creo que disfrutarás haciendo un motor de juego que un juego porque el juego real a menudo no necesita el tipo de algoritmos en los que piensas. Estoy de acuerdo con la respuesta de Jakov Manjkas a que soy un joven programador independiente. Tengo muchas ganas de ser un desarrollador de juegos, pero odio usar motores como Unreal. ¿Que puedo hacer? No necesitas un motor de juego para hacer el juego, solo te ayuda a reutilizar partes de uso común como la física o la detección de colisiones.

Escribí un pequeño juego en c ++ y gráficos SDL sin motor de juego. Mi hermano creó un juego con solo c ++ y openGL como parte de un proyecto escolar. Entonces es posible hacerlo pero no es muy práctico.

Algo práctico que podrías hacer es crear un juego sin ningún motor de juego, pero haz algunos métodos tan generales como puedas como la detección de colisión, la gravedad, etc. Al final del juego tendrás tu propio motor de juego ligero que puedes continuar para desarrollar a medida que haces más juegos. Depende de usted decidir si vale la pena este esfuerzo y es necesariamente más fácil que usar un motor de juego existente.

Un problema familiar esto.

En cada lote de nuevos programadores de juegos hay algunos que quieren hacer trabajos básicos; para escribir un dibujo de línea más rápido o inactivo, venir directamente de la universidad para escribir código 3D bajo que supere a 12 doctorados con años de experiencia, también podrían mejorar el sistema operativo, si se permite. De hecho, pueden ser el mejor y el único buen programador del edificio.

Lo siento Bub. Este es el trabajo que tenemos en oferta. Hay muchos solicitantes. No queremos obligar a nadie a hacer un trabajo que no quieren hacer. Entonces, deténgase y piense si esto es realmente lo que está llamado a hacer.

Necesitamos que todos trabajen a un alto nivel, cooperen, colaboren y se comuniquen. Hacemos juegos, no ejemplos de código de libros de texto.

Si te tomas en serio la idea de ti mismo, deberías ponerte al día con el sitio web y los videos Handmade Hero de Casey Muratori: es un esfuerzo construir un juego desde cero usando nada más que C. Casey es un programador muy talentoso con un excelente historial y él hace nuevos episodios en Twitch donde responde preguntas. También hay una comunidad de desarrolladores prácticos y ascendentes que se juntan en los foros. Si realmente quieres hacerlo desde cero, esa es la comunidad para ti.

Sin embargo, tenga en cuenta que esto es lo que los programadores llaman una empresa no trivial .

Héroe hecho a mano día 337.

Un motor como Unreal o Unity representa varios cientos de años-persona de tiempo de desarrollo. Incluso un marco básico para el desarrollo de abajo hacia arriba le llevará un par de años como mínimo, y es poco probable que sea tan bueno o confiable (mucho menos tan completo) como los grandes productos comerciales. Y no se distraerá de hacer su juego luchando con el motor: se distraerá de hacer su juego por la necesidad de construir las herramientas y la tecnología que necesita, desde cargadores de imágenes hasta controles de reproducción de audio y teclado independiente de la velocidad de fotogramas. entrada. Las probabilidades de que termines un motor de juego, un conjunto de herramientas y un juego por tu cuenta son casi nulas

Literalmente, no puede imaginar cuánto trabajo requiere un motor moderno. El código fuente de Unreal es de aproximadamente 2.5 millones de líneas (sin contar todo el código que no ve, para cosas como el FBX SDK, las bibliotecas de audio, etc.). La estimación habitual (es BS, pero es la estimación habitual) es de 10 a 12 líneas de código por desarrollador por día. Haz las matemáticas.

El motor del juego no es necesario para hacer un juego.

Haces mucho más codificación si usas una biblioteca de juegos como SDL, SFML, OpenGL … (estos son para C ++ ya que es el único lenguaje que mencionaste, probablemente puedas encontrar bibliotecas de juegos para otro idioma).

Definitivamente no tendrá problemas relacionados con el motor (porque no usa el motor) y si tiene problemas con la biblioteca, probablemente sea su concepto erróneo sobre la biblioteca (debe hacer muchas cosas usted mismo cuando usa bibliotecas).

Mencionaste algoritmos. Supongo que eres estudiante o lo fuiste hasta hace poco, porque los algoritmos en la programación del mundo real se usan menos que en la academia. Todavía se usan, pero muchas cosas no son algoritmos.

En el desarrollo de juegos (y posiblemente en otras áreas de programación) solo necesita hacer que las cosas funcionen, no necesita optimizarlo. Cuando se vuelve demasiado lento, utilizará algoritmos / optimizaciones más rápidos. Esto a menudo no es necesario.

En el desarrollo de juegos, cosas como arquitecturas de programación y paradigmas son mucho más importantes, por lo que es mejor aprenderlos (aunque puede programar juegos sin saber nada al respecto).

Si desea algoritmos, la programación de IA usa la mayoría de los algoritmos y la mecánica, la física y la programación de red también los usan bastante (aunque nunca los hice por separado, así que realmente no lo sé). Si eres independiente, tendrás que hacer todo por ti mismo, así que si no puedes soportar la falta de algoritmos, tal vez sea mejor permanecer en la academia.

Un consejo más: tu primer juego será muy malo y tus primeros 5 juegos también serán malos, solo sigue haciendo juegos.

Superalo.

Si no está lidiando con problemas relacionados con el motor, alguien más creado, estás lidiando con problemas relacionados con el motor que creaste para ti mismo.

Los motores de juego irreal u otros obtienen un tedioso trabajo estructural para que puedas trabajar en el juego real. Tendrás mucho más éxito de esa manera.

Puede obtener más de Unity que Unreal. Se necesitará menos trabajo con el motor del juego para que las cosas funcionen.

Un poco de perspectiva aquí:

Digamos que quieres hacer un prototipo básico de combate de acción en 3D.

Mientras escribe su propio código, escribirá una herramienta de animación y escena gráfica, posiblemente una herramienta de importación / exportación, posiblemente un sistema de detección de colisión (o integración de physx), luego sus propios sombreadores, luego su propio bucle de iluminación, luego …

Tienes la idea, ¿verdad? Serán varios meses de trabajo. DESPUÉS de que haya aprendido a hacer todo lo anterior.

Entonces digamos que agarras el motor de la unidad. Podrá hacer todo lo anterior, y más, y su prototipo se puede terminar … en UN DÍA. (Lo sé porque lo hice una vez), si tienes todos los recursos de arte listos. Eso sin comprar nada de la tienda de activos.

Entonces. Un día versus varios meses (que pueden extenderse a años) de trabajo. Piénsalo.

Con todo eso en mente, la idea general es:

  1. Si quieres hacer tu propio motor de juego, básicamente no esperes que se convierta en un juego, y no esperes que tu proyecto esté terminado. Solo hazlo por diversión y no esperes que salga nada.
  2. Si quieres crear un juego, y no un motor de juego, entierras tu idea de escribir tu propio motor, toma Unity 5, Unreal 4 o cualquier otra cosa disponible y úsala. Esto te ahorrara mucho tiempo.
  3. Los juegos basados ​​en 2D y Sprite son más adecuados para rodar tu propia tecnología que los juegos en 3D debido a su menor complejidad. Todavía perderás mucho tiempo reinventando la rueda, pero en general cuando trabajas con tecnología 2D, tus posibilidades de terminar un juego son mejores. Ligeramente.

Línea de fondo:

  1. Utiliza el motor existente si quieres lanzar un juego.
  2. Escriba su propio motor, si le gusta jugar con la programación de gráficos, pero no planea lanzar nada y simplemente hágalo por diversión.

Tienes algunas opciones aquí. Parece que desea que el motor se detenga como un problema para usted. Como no uso Unreal, y usted no es específico sobre los problemas que enfrenta, estas son las opciones:

  • Haz tu propio motor desde cero. Aprenda matemáticas 3D y OpenGL, implemente su propia cámara, ventana gráfica y proyección. Aprenda a representar mallas 3D, implementar las texturas, hacer los sombreadores para el mapeo de relieve. Luego, aprenda a acelerar el rendimiento con gráficos de escenas, árboles BSP o cuadrúpedos. Implemente una biblioteca GUI desde cero (esa es una de las partes más difíciles). Luego pruébelo en diferentes máquinas para ver cómo funciona.
  • Use una biblioteca, no un motor, que proporcione lo que necesita y conecte cosas juntas. Por ejemplo, para renderizar, puede usar Ogre SDK (alimenta Torchlight 1 y Torchlight 2) y luego usar CEGUI para la interfaz de usuario. Ese es el enfoque de middleware
  • Encuentra otro motor que te convenga más que Unreal. No estoy seguro de si eso sigue siendo cierto (así que corrígeme si estoy equivocado), parece que muchos de Unreal asumen que se usará para juegos FPS (al menos lo probé hace 6 años). O podría ser que Unreal es más obstinado de alguna manera. Es posible que desee probar otros motores que brindan más de un sandbox y ni siquiera sugiere una arquitectura, como Unity, que no viene con ninguna clase o arquitectura de juego predefinidas a menos que importe los activos oficiales.

El Unreal Engine ha sido uno de los motores de juego más sofisticados del mercado actual y está disponible en muchas versiones a lo largo de los años. Este era un campo en el que estaba súper interesado (motores de juego basados ​​en FPS) y seguí mucho cuando era más joven, pero nunca tuve tiempo para dedicarme realmente.

Tengo curiosidad por saber qué versión del motor estaba utilizando, si usted es pre 4 (UnrealScript que supuestamente funcionaba como un lenguaje de alto nivel para ayudar a los desarrolladores abstrayendo los subrayados más complejos.

Recientemente, parece que lanzaron UnrealScript después de la versión 4 del motor a favor de las secuencias de comandos basadas en C ++. Como otros te dirán, este campo no es trivial y si estás intentando desarrollar juegos que requieran el uso de un motor como Unreal (o cualquiera de las alternativas), realmente no veo una forma de evitar el trabajo duro y dedicación para dominarlo.

Depende de qué tan bajo nivel quieras ir y de lo que quieras hacer. Recientemente probé SDL (Simple DirectMedia Layer – Homepage), que tiene el nivel más bajo que la mayoría de las personas. Te da algunos métodos básicos para crear una ventana y obtener entrada de teclado / sonidos / etc., pero básicamente tienes que escribir todo el motor del juego y todo el renderizado / física / etc. desde cero Si eres bastante nuevo, te sugiero usarlo para construir un juego simple como Tetris y luego comenzar lentamente a hacer cosas cada vez más complejas. De hecho, recientemente construí Tetris desde cero usando C ++ / SDL solo para familiarizarme con el lenguaje y fue MUCHO más fácil de lo que pensaba: pude terminarlo en solo unas pocas sesiones, trabajando en él después de volver a casa del trabajo (aunque para ser justos, he estado codificando durante mucho tiempo). Otra cosa interesante de SDL es que es realmente fácil de usar con OpenGL, por lo que una vez que esté listo para escribir sombreadores y trabajar en 3D no tendrá que cambiar los marcos … aunque, por supuesto, tendrá que aprender OpenGL.

De hecho, no estoy de acuerdo con las personas que te dicen que uses Unity. Si está tratando de hacer juegos desde cero y convertirse en un experto en C ++, simplemente debe ir directamente a por él en lugar de hacerlo de una manera más indirecta utilizando los motores existentes. Los motores son geniales, y no hay duda de que es la mejor manera de terminar un juego, pero en realidad no es una cosa única para todos. Diferentes personas tienen diferentes objetivos. Algunas personas solo quieren hacer juegos y otras personas realmente QUIEREN trabajar con la tecnología de bajo nivel. Suenas como este último.

Su juego tendrá que ser mucho más simple y se verá mucho peor de lo que se vería si usara un motor existente, pero aprenderá mucho más sobre la codificación de bajo nivel y sobre cómo armar un juego desde cero. Usar motores es una excelente manera de aprender sobre cómo hacer juegos, pero no es una buena manera de aprender sobre ESCRIBIR motores, que parece ser tu objetivo. Aprenderá mucho más acerca de sus áreas particulares de interés en sus primeros juegos de C ++ de lo que aprendería si lanzara juegos con Unity o Gamemaker o lo que sea. Si terminas teniendo demasiados problemas para escribir un juego desde cero, entonces quizás vuelvas a Unity solo para que puedas tener algunos pequeños éxitos y mojarte los pies. Pero si tiene confianza en sus habilidades, entonces creo que debería hacerlo.

En los mundos del desarrollo de software, hay dos caminos particulares que puede tomar (aunque habrá cierta superposición en su vida si lo hace lo suficiente), y ese es 1) el camino del constructor, y 2) el camino de El fabricante de herramientas. Tienes que decidir qué camino quieres seguir, al menos por el momento, porque ambos requieren una gran inversión. Los fabricantes de herramientas son aquellos que siempre están mirando las cosas a nivel de sistemas, como cómo se hacen los motores de los juegos y cómo mejorar uno, extenderlo o simplemente hacer uno propio desde cero (bueno, no completamente desde cero. Ya nadie lo hace). Simplemente pegamos módulos juntos y agregamos encima de ellos para producir algo “nuevo”). Si bien los constructores se preocupan por las herramientas que usan, están más preocupados por hacer algo. Simplemente usarán lo que mejor funcione para ellos y comenzarán.

Si quieres ser un fabricante de herramientas, prepárate para un viaje muy largo antes de poder producir un juego. Sin embargo, puede encajar bastante bien en un equipo en el que puede crear herramientas específicas para el flujo de trabajo de ese equipo. Esto puede incluir trabajar con motores existentes o uno construido desde cero para tu juego específico.

Si estás más interesado en ser un creador de juegos, entonces aprende el motor que más te guste (Unreal, Unity, Godot, etc.) y ponte en marcha. En este caso, solo tendrá que “absorberlo”, como han dicho otros, y superar su ego (porque ese es a menudo el problema real). De lo contrario, mirará hacia atrás en este momento dentro de 6 meses, y todavía no tendrá nada que mostrar, excepto un montón de tiempo perdido.

Sea lo que sea, elige algo y comienza a desarrollar ese conjunto de habilidades. No pierdas el tiempo.

Puedes intentar hacer funcionar tu motor de juego con fines puramente educativos, tal vez lo que aprendas en el camino te ayude a comprender y apreciar lo que logran los motores de juego modernos. Pero en última instancia, si planea enviar un juego decente dentro de su vida útil, tendrá que trabajar con un motor.

Como alguien que ha escrito un motor gráfico en C ++ para la universidad, puedo decirle que fue un gran esfuerzo incluso mostrar pequeños rectángulos en la pantalla. Un motor gráfico es excelente y elegante, pero un motor de juego abarca mucho más que solo un gráfico; Se ocupa de la física, la creación de redes, la gestión de activos, el sonido, la animación, el subprocesamiento, el soporte de localización y probablemente incluso más funciones que la mayoría de las personas desconocen o no les importan. Se han necesitado décadas de mejoras iterativas en la industria para llegar al punto en el que se encuentran los motores de juego hoy en día, sería una tontería no usarlos.

Entonces, yo y un amigo mío solo planeamos escribir un juego por diversión (para ser justos, él hizo la mayor parte del trabajo que solo estaba ayudando). Decidimos usar en HTML5 y JavaScript. Ninguno de nosotros tenía experiencia en escribir juegos (o renderizar cosas) y terminamos haciendo una versión más simple del juego Snake. Puede consultarlo aquí si lo desea. Eso sí, esta fue la primera vez que mostramos cosas en una pantalla, por lo que no es mucho.

Ahora estamos escribiendo otro juego de plataformas 2D muy simple usando OpenGL, Qt y C ++.

No sé por qué incluso estás tratando de usar Unreal o cualquier otro motor de juego. Por lo que entiendo, los motores de juegos están diseñados para ser utilizados con juegos de gran escala que requieren las características proporcionadas por ellos. No creo que debas usar un motor de juego para tu primer proyecto, ya conoces C ++, solo debes escribir un juego con OpenGL o DirectX o lo que sea.

Si desea hacer su propio motor, prepárese para esta lista de cosas que hacer:

Desarrollo de motores de juegos multiplataforma y desarrollo de juegos

No odies ningún motor, son un trabajo magistral de algunas personas muy inteligentes disponibles para usar y aprender.

Programar su propio motor es una muy buena experiencia de aprendizaje. Mientras que usar Unreal o Unity te ahorrará un gran momento.

Haga la programación del motor solo si desea aprender también el desarrollo del motor. Si solo quieres hacer un gran juego, será mucho mejor usar Unreal / Unity y ahorrar tu valioso tiempo.

¿También odias la Unidad? En mi opinión, cuando traté de hacer cosas muy simples y también escuché de mis antiguos colegas, Unreal Engine 4 hizo la vida más difícil, es para AAA y grandes grupos de personas que pueden ajustar el código del motor a sus necesidades. A UE4 no le importan los indies, también prometieron muchas cosas pero ninguna acción. También pasé mis días depurando y reparando errores en UE4, pero solo quiero decirte que hay errores CORE que no puedes solucionar porque romperá la compatibilidad con el juego de todos los que se envían. Entonces lo hicieron mal al principio. En el código de alto nivel, se siguen demasiados conceptos y lógicas malas, sin mencionar que tienen 3 características para el mismo problema, solo están agregando capas, sin administración, sin repensar, empeorando con el tiempo.

Solo mirar las notas de la versión UE4 es una broma, la misma cantidad de corrección de errores y la función “nueva”. los errores no son lineales, cincuenta – cincuenta es solo una mala decisión. Pero entonces apuntan a los juegos AAA. Le dieron gráficos geniales a herramientas geniales, y algunos errores muy muy básicos que otros motores no tienen, pero puedes arreglarlos a todos (buen tiempo)

Hubo juegos en los que UE4 era la mejor opción, y hubo juegos en los que Unity me quedaba mejor.

Pero para una regla general, elija siempre Unity cuando quiera acercar la realidad y las expectativas. También elige cuándo quieres hacer un juego simple en 3D y 2D.

Espero eso ayude.

Si desea escribir código básico de bajo nivel, vaya a su universidad local y regístrese para una clase avanzada de gráficos por computadora. A menudo comienzan con lo básico, como construir su propio rastreador de rayos. Puedes construir cosas realmente divertidas de bajo nivel.

Es moderadamente útil comprender cómo funciona el diseño de juegos de nivel superior, pero no es estrictamente necesario. Pero lo más importante, es muy divertido .

Esos motores tienen fácilmente tres órdenes de magnitud más horas-hombre invertidas en depuración y optimización que cualquier cosa que pueda escribir. Es una pérdida de talento intentar reinventar algo que un motor puede hacer por usted.

Si tiene problemas para usar un motor, es probable que no se haya tomado el tiempo para comprender la teoría de funcionamiento del motor. Cuando no te tomas el tiempo para hacer esto antes de comenzar a escribir tu juego, es probable que trabajes contra el motor en lugar de hacerlo.

El motor funciona.

La forma en que estás usando el motor no lo hace.

Intente pasar un tiempo entendiendo la filosofía de diseño del motor. Aprenda a escribir código que sea consistente con esa filosofía de diseño. Hacerlo te liberará mucho tiempo para que puedas agregar valor a través de la lógica del juego, el diseño, la mecánica y la calidad de producción en lugar de escribir un asignador de memoria que funcione exactamente de la manera que crees que uno debería.

Comprenda que al ser un joven programador independiente, todavía no ve la gran sabiduría de reutilizar las herramientas creadas por otros.

Desea que el sistema sea como lo haría. No entiendo por qué otra persona lo hizo de esa manera.

Un motor de juego es un proyecto complejo. Encontraría rápidamente problemas de diseño que ni siquiera sabe que existen.

Que deberias hacer Aprende la estructura del motor, desde cero. Haga la respuesta del diseñador al por qué, su propia respuesta al por qué.

También me puse a escribir mi propio motor.

En lugar de hacer juegos, terminé trabajando en el código del motor.

Sorprendentemente, el motor resultante no era tan bueno como Unity, era más difícil de trabajar y tenía herramientas mucho más débiles para la creación de contenido. Pero aprendí mucho. Significaba que ahora pienso claramente en la carga de recursos, el manejo del estado, las canalizaciones de procesamiento, etc.

Mi consejo sería aprender mucho sobre la codificación del motor, pero explotar ese conocimiento al crear juegos con motores de terceros.