Entonces, quieres dedicarte al desarrollo de juegos. O, más específicamente y simplemente: te gustaría convertirte en desarrollador de juegos trabajando en el aspecto técnico. Bueno, ¡cualquiera tendría preguntas sobre cómo hacer eso!
Por ejemplo:
Hay toneladas de información sobre estos temas, tanta que puede sobrecargar fácilmente tu cerebro, dificultando así la toma de decisiones que valgan la pena.
Mi nombre es Andrey Mikheev y soy el desarrollador backend senior en Pixonic, MY.GAMES. Llevo 20 años en la industria del juego. La primera vez que intenté crear juegos fue en los años 90 en el entonces popular ZX Spectrum. En este artículo, iluminaré las opciones que tienes al cambiar al desarrollo de juegos y explicaré en qué se diferencian estas opciones.
En esta publicación, asumiremos que el lector recién está comenzando su viaje hacia la industria. Es imposible aprender todo simultáneamente, por lo que tendrás que priorizar y elegir cómo realizar tus estudios. Por supuesto, cada uno tiene una experiencia diferente; Hay más de un camino para desarrollarse en esta profesión.
La belleza del desarrollo de juegos (y de muchas otras áreas de TI) es que hay muchas áreas en las que puedes aplicar tus habilidades: podrías convertirte en productor, comercializador, artista, diseñador, guionista, modelador, analista, desarrollador del lado del cliente, desarrollador principal, desarrollador de metaservicios, desarrollador de renderizado, etc. De hecho, en el mundo de los juegos independientes, prácticamente tienes que combinar casi todas las habilidades antes mencionadas, pero este es un tema para otro día.
Cuando piensan en comenzar una carrera en el desarrollo de juegos, las personas suelen centrarse en los aspectos tecnológicos: el motor que dominar, el lenguaje de programación que elegir primero o las habilidades específicas en las que trabajar.
Pero tenga en cuenta que la tecnología es sólo una herramienta; no es necesario que construyas toda tu identidad como desarrollador en torno a algo en particular ; un mecánico no es la llave inglesa. Hoy es un destornillador de estrella, mañana es eléctrico, pasado mañana es una herramienta neumática. El objetivo no es aprender a utilizar un destornillador específico, sino comprender la estructura de los automóviles y cómo ensamblarlos y repararlos.
Reemplace estas llaves con motores de juegos, lenguajes de codificación y otras cosas, y el punto no cambiará. Estas son sólo herramientas que usted puede utilizar
Entonces, en mi opinión, las habilidades generales son lo más importante en esta etapa. Porque no te encargan la tarea de crear un “juego”, sino escribir un buen código .
El objetivo no es crear un juego de éxito de mil millones de dólares, sino crecer como desarrollador. De todos modos, crear un juego de mil millones de dólares no se trata tanto de desarrollo, sino de ideas y marketing; el código es algo secundario a eso. Por supuesto, estos dos objetivos no se contradicen, pero yo no establecería un éxito sorprendente como su primer objetivo; si lo hace, rápidamente podría sentirse decepcionado con toda la empresa en general.
Volviendo al tema del código, un enfoque general en el código es importante porque el código de alta calidad siempre tendrá una gran demanda en cualquier industria, y esto tiene muchas aplicaciones: juegos, fintech, algoritmos de control de robots, lanzamiento de cohetes al espacio. Algunos podrían decir que un código de alta calidad implica grandes retrasos y que el tiempo es clave en este negocio. No lo creas. Si puedes escribir un buen código, no habrá tiempo de inactividad.
Otra cosa es que si tu código es descuidado, para crear un producto de alta calidad tendrás que corregir tus hábitos, y eso requerirá mucho tiempo y esfuerzo.
Otro punto muy importante tiene que ver con el tiempo: el tiempo dedicado a crear un buen código siempre se ve compensado por la reducción del tiempo dedicado a mantenerlo . Después de todo, un juego, y especialmente un multijugador, es un producto duradero, y la calidad del código es de gran importancia en este caso.
Otros especialistas deberían poder comprender fácilmente su código y poder adaptarlo sin necesidad de reescribirlo. Y usted también debería poder leerlo fácilmente si de repente decide cambiar algo dentro de unos años. Como ejemplo aproximado: es mejor dedicar un par de meses a escribir código de alta calidad una vez y poder realizar algunos cambios rápidamente en un par de días, que escribir algo incomprensible en una semana y luego necesitar un mes para cada menor. editar en el futuro.
En pocas palabras, código limpio, arquitectura limpia, ECS, SOLID, KISS, OOP, algoritmos y estructuras de datos: se debe prestar especial atención a todos estos temas si se quiere ser un buen especialista técnico en el campo del desarrollo de juegos.
Sí, los algoritmos pueden causar dolores de cabeza a algunas personas. Pero hay muchos más de estos "algoritmos y estructuras" en el desarrollo de juegos que en los proyectos web típicos, y si los dominas, te simplificarán enormemente la vida.
Naturalmente, una comprensión más profunda de estos conceptos sólo se obtendrá con la experiencia. Con el tiempo, habrás participado en una variedad de proyectos, comenzarás a comprender cómo trabajan otros especialistas y verás qué te preocupa personalmente cuando trabajas con el código del juego.
Aprender de las experiencias de otras personas es fundamental . Estudie proyectos de código abierto, escuche conferencias de expertos de la industria y recuerde que hay muchas fuentes de información disponibles ahora. Pero lo que no debes hacer es sumergirte en el jugo de tu proyecto, especialmente si no tienes un buen mentor en tu equipo. Ningún desarrollador competente puede trabajar en el vacío. Lo principal aquí es no exagerar y empezar a utilizar código de otros proyectos sin entender lo que estás haciendo y por qué.
Y un punto más importante: reescribir código es normal, no tengas miedo de hacerlo . Además, durante el período de formación, esto es de vital importancia. Verás cómo el uso de buenas prácticas te permitirá mejorar tu código y hacerlo más fácil de mantener.
El proceso de mejorar sus habilidades generales de programación no es rápido. Puede llevar meses o incluso años. Así que prepárate para esto, porque simplemente no puedes prescindir de él.
Si tienes la oportunidad de realizar unas prácticas en un buen estudio, esto acelerará enormemente tu crecimiento . Tendrás la oportunidad de aprender varios aspectos del desarrollo de juegos y obtener respuestas a tus preguntas de tus mentores. Pero seamos honestos, esta no es la forma más común.
Buscar un primer trabajo en la industria del juego desde cero es otro desafío. La famosa paradoja: para conseguir un trabajo se necesita experiencia, y para conseguir experiencia, se necesita un trabajo. En este caso, vale la pena considerar el autoestudio . Descartemos inmediatamente la idea de los cursos pagos: no son adecuados para todos por muchas razones. Afortunadamente, existen docenas y cientos de guías en Internet para todos los aspectos de la codificación de juegos.
Una vez que hayas respondido esas preguntas básicas y hayas entendido qué y cómo aprenderás, es hora de decidir con qué motor de juego trabajarás, y esto también determinará el lenguaje de programación que tendrás que aprender.
Este tema es demasiado amplio para tratarlo en un solo artículo. Además, como desarrolladores, no nos interesan tanto los motores como los lenguajes de programación. Si quieres profundizar más en el tema te aconsejo que leas esto
Al comienzo de su viaje, no es necesario que elija inmediatamente un motor grande y serio como Unreal Engine o Unity. Si no tienes conocimientos teóricos ni prácticos, algún motor para juegos web será suficiente: algo como PlayCanvas o sus análogos.
El motor Defold también puede ser una buena opción para empezar . Es más sencillo que Unity y más enfocado a juegos 2D. Utiliza un lenguaje muy sencillo, Lua, que es fácil de aprender.
Para ahorrarle algo de tiempo, simplemente describiré algunos aspectos de los idiomas y los organizaré en orden de prioridad, tal como los aprendería; Este orden no habla de la calidad del idioma ni de sus problemas. Más bien, es mi evaluación del equilibrio entre la complejidad, la relevancia y las capacidades de los idiomas.
Por ejemplo, Lua es un lenguaje muy interesante, fácil de aprender, puedes escribir un juego con él usando el motor Defold. Pero no puedes elegirlo como idioma principal para tu experiencia de desarrollo. Es un lenguaje auxiliar que se usa junto con lenguajes más populares como C++ o C#.
Por supuesto, esta no es una lista completa de todos los lenguajes de programación. Hay más de una docena de ellos. Pero esto es lo que tengo ganas de señalarles. Entonces, esto es lo que aprendería y en qué orden:
C#: si planea trabajar en desarrollo en serio y durante mucho tiempo, entonces es mejor comenzar con lenguajes populares de uso general. C# es uno de ellos. También es un lenguaje adecuado para su plan de respaldo: incluso si de repente se aburre del desarrollo de juegos, puede escribir una variedad de software en C#, como fintech, aplicaciones comerciales, etc.
C# le permitirá familiarizarse con los conceptos de programación estándar e implementar una variedad de enfoques de desarrollo. Aprenderá todo sobre esas abreviaturas que parecen aterradoras como OOP, CQRS, DDD, ECS. Por supuesto, la mayoría de estos enfoques se pueden implementar en cualquier lenguaje de programación. Pero hay matices. Por ejemplo, no todos los idiomas tienen el concepto de "clase" y, en consecuencia, los conceptos se implementan de manera diferente. Esto puede dejar boquiabierto a un desarrollador novato y crear un montón de problemas innecesarios, incluidos los de motivación. Entonces, en mi opinión, C# es la mejor opción (pero no la más fácil) para comenzar una carrera en desarrollo en comparación con, por ejemplo, JavaScript.
Java : al igual que C#, Java es un lenguaje de propósito general. Pero en el desarrollo de juegos, esto es principalmente relevante en términos de servidores. Por supuesto, existen motores de juegos Java (por ejemplo, LibGDX), pero no son tan populares como Unity para el desarrollo de juegos.
Nuevamente, estos lenguajes generales son buenos para una situación en la que ya conoces Java, pero trabajas, por ejemplo, en Fintech y, de repente, decides crear un juego. No querrás aprender un nuevo idioma desde cero sólo por hacer un experimento, ¿verdad?
JavaScript : Como dijo Jeff Atwood, uno de los fundadores de Stack Overflow, “Todo lo que se pueda escribir en JavaScript se escribirá en JavaScript. "
Es triste pero cierto que cada vez se escriben más proyectos de juegos en este idioma. El hecho es que JavaScript es muy simple, especialmente para principiantes. Y si trabaja en algún tipo de motor web, lo más probable es que incluso le indiquen dónde ingresar sus líneas de código.
A pesar de su simplicidad, no creo que JavaScript sea un buen lugar para comenzar su viaje en el desarrollo de juegos. Es demasiado diferente de otros lenguajes de propósito general y esto puede jugar una mala pasada a los desarrolladores. Existe la idea de que un desarrollador piensa en términos de los conceptos de su primer lenguaje de programación . Hay algo de verdad en esto, por lo que al principio es mejor aprender técnicas y enfoques más generales. Pero si decides empezar con juegos web, probablemente no podrás arreglártelas sin JavaScript. Reina en el mundo web. En este caso, te aconsejo que prestes atención a TypeScript. Este lenguaje es muy similar a C# y facilitará el cambio a otro lenguaje en el futuro.
Lua/Python: ¿Por qué los junté? Estos son lenguajes de secuencias de comandos, generalmente utilizados para crear secuencias de comandos de partes individuales de la lógica del juego. (Sí, hay motores como Defold donde estos son los principales lenguajes de desarrollo. Pero estas son excepciones a la regla). Por ejemplo, Python es una herramienta muy popular para secuencias de comandos en línea y se usa en el editor 3D de Blender.
Conocer y poder utilizar Lua y Python es útil, pero como mencioné anteriormente, son lenguajes auxiliares y los dejaría para más adelante. A menos, por supuesto, que elijas el motor Defold para tu primer proyecto, entonces Lua es indispensable.
C++ : Algunos de ustedes se sorprenderán de que C++ esté al final de la lista. Y no es que el idioma sea malo, sino que su camino es el más difícil. Este es el lenguaje más potente de los presentados, pero también el más complicado, con sus propias características.
C++ se utiliza para crear juegos AAA y permite aprovechar al máximo el hardware. Pero no le sugeriría esto a un desarrollador novato: hay muchas posibilidades de que se decepcione de la industria. Pero si realmente sabes que C++ es lo que realmente necesitas, no tienes miedo de las dificultades involucradas y tienes un plan de acción claro, ¡adelante!
Elegir un lenguaje de programación es importante, pero no olvides que, ante todo, debes mejorar tu nivel de inglés técnico: te ayudará a navegar por guías, cursos y otras fuentes de información valiosa.
En mi opinión, esta es la siguiente decisión que debe tomar un desarrollador de juegos. (No es algo así como la elección entre desarrollar juegos móviles, AAA o juegos web). La razón es simple: al comienzo de tu viaje, es casi seguro que no tendrás la opción de crear grandes juegos. Piénselo, ¿cómo podría trabajar en algún tipo de Escape from Tarkov o Call of Duty sin experiencia? Tu primer juego no debe ser grande ni complejo; de lo contrario, no lo terminarás. Simplemente te agotarás y dejarás el desarrollo de juegos.
Es bueno entender exactamente lo que quieres hacer. Para un desarrollador experimentado esto no es tan importante, pero al principio la respuesta a esta pregunta acotará los caminos de posible estudio.
En términos de un jugador versus multijugador: desde el punto de vista del desarrollo del cliente (es decir, la parte del juego con la que el jugador interactúa directamente), la diferencia para un desarrollador puede no ser tan grande. Pero el modo multijugador requiere un backend y todos los problemas asociados con eso, y este también es un tema aparte y vasto.
Un juego para un solo jugador es más fácil en este sentido porque no tienes que preocuparte por sincronizar el estado del mundo para otros jugadores, separar la lógica del juego u otros problemas similares.
En términos de mecánica de juego, un juego para un solo jugador también puede ser mucho más simple que el multijugador, y cuanto más simple sea el proyecto, más fácil será terminarlo. ¡Y terminar lo que empezaste es una habilidad fundamental en cualquier negocio!
En resumen, recomendaría comenzar con juegos para un solo jugador: será más fácil . Pero si realmente quieres crear un juego multijugador sencillo para jugar con amigos, ¿por qué no? Sólo debe comprender que esto requerirá más tiempo para obtener su primera versión funcional. Sin embargo, el impulso interno de una persona es algo muy complejo; tal vez crear juegos en línea te motive mucho más que los juegos para un solo jugador, aumentando las posibilidades de terminar tu primer proyecto.
Bueno, aquí llegamos a la pregunta principal: ¿por dónde empezar exactamente si quieres crear juegos?
Digamos que ya entendemos aproximadamente el tipo de juego que queremos hacer en primer lugar. Sabemos qué tipo de lenguajes de programación se utilizan principalmente y en qué motores se utilizan. Esta es la etapa en la que se debe seleccionar este idioma y motor. (Recomendaría comenzar con C#. Necesitará C++ para crear resultados AAA, pero guardémoslo para más adelante, cuando adquieramos experiencia). Entonces, nuestra combinación de lenguaje y motor podría ser C# + Unity . Estos tienen demanda y son una excelente elección.
Este es un punto importante: no empieces con un motor, selecciona el idioma primero . Sin un idioma, no podrás aprender el motor de manera efectiva; simplemente no entenderá nada de los ejemplos y la documentación y sólo se confundirá. Idealmente, no comenzarías a aprender un motor de juego antes de dominar el lenguaje y poder escribir programas simples con confianza.
Para mejorar sus habilidades de programación, consulte proyectos como
Una vez que domines un poco tu idioma, finalmente podrás comenzar a estudiar el motor. En 2023, hay mucha información sobre este tema: Internet está lleno de recursos; docenas de canales de YouTube para cualquier cosa que elijas. Además, como dije, Unity es tremendamente popular, por lo que no falta material.
Puede encontrar una solución en video para cualquier problema de los creadores del motor (disponible directamente en Unity Hub, que instalará al inicio),
Esos fueron los tres pasos básicos para comenzar y, a partir de ahí, tu camino puede continuar. Déjame darte un esquema aproximado.
Una vez que aprendas un poco del idioma y el motor elegidos, intenta crear un juego sencillo . Cualquier juego, incluso el tres en raya. Haz todo como quieras, sin límites. Debes escribir el código tú mismo. (Evite copiar y pegar desde Stack Overflow , que no obstante es un recurso muy útil). El criterio principal es que el juego debe funcionar.
A continuación, crea algunas funciones nuevas para el juego e intenta agregarlas . Por ejemplo, si estás creando un juego de plataformas, intenta crear una función que cambie la gravedad del nivel al presionar un botón; o la capacidad de teletransportarse de una parte del nivel a otra.
Intente notar lo fácil o difícil que fue agregar algo nuevo a su borrador de trabajo. la cantidad que necesitabas para cambiar la estructura del código, etc. Después de eso, estudie las mejores prácticas, vea cómo otros desarrolladores sugieren organizar el proyecto y el código (OOP, SOLID, KISS) y reescriba el juego teniendo en cuenta sus nuevos conocimientos.
Luego, vuelva a crear una nueva función y créela utilizando ese nuevo conocimiento . Tenga en cuenta cómo el código mejorado le facilita o dificulta agregar una nueva función y cuántos errores puede encontrar.
Gradualmente, a través de varias iteraciones, agregue complejidad al proyecto y reescríbalo con las lecciones que ha aprendido.
Suponiendo que no tome atajos, verá cómo las decisiones que tome interfieren o ayudan a implementar nuevas funciones. Uno de los principales criterios para la calidad del código es la facilidad con la que se realizan cambios en el proyecto. Desafortunadamente, no existen leyes claras al respecto; todo viene con la experiencia.
Si no tienes ganas de crear juegos simples, puedes comenzar codificando mecánicas individuales . Por ejemplo, podrías comenzar haciendo un “automóvil” rudimentario compuesto por un par de cubos impulsados sobre alguna superficie y luego, gradualmente, agregar otras mecánicas a la mezcla.
Después de eso, puedes crear un juego más complejo y volver a realizar varias iteraciones para mejorar el proyecto. Si obtienes un resultado interesante, eventualmente puedes intentar lanzar este juego en las tiendas.
Puedes intentar liberar a través de
Puedo ofrecerte un pequeño truco con respecto a los lanzamientos de juegos: juegos web/de navegador . Aunque este formato parece haber perdido popularidad dado que los usuarios ahora juegan principalmente en dispositivos móviles, PC o consolas, los juegos web todavía tienen una audiencia suficiente, por lo que puedes intentar lanzar tu proyecto debut como uno solo. Esto también es mucho más fácil que lanzarlo como juego nativo en dispositivos móviles.
La competencia en juegos móviles es feroz y lo más probable es que tu juego pase desapercibido, suponiendo que no se promocione, y es muy difícil promocionar un proyecto sin un editor. Para los juegos web, existen portales especiales (por ejemplo: Armor Games, Newgrounds, WebGames ) que alojan estos proyectos: es muy fácil lanzarlos allí e incluso puedes ganar algo con la publicidad. No te hagas ilusiones, pero aun así, si sucede, es una ventaja agradable.
Ahora, una pequeña advertencia. Hoy en día, el enfoque "sin código" es muy popular. Esto es cuando se crea un proyecto sin escribir código. (También se llama “programación con clic del mouse”). ¿Mi consejo? Es mejor mantenerse alejado de este enfoque.
Estos enfoques sin código son ideales para probar mecánicas de juego o crear un prototipo simple. Pero tenemos un objetivo general diferente: crear un juego sencillo sin código no te acercará más a convertirte en desarrollador.
Recuerde: ninguna cantidad de lectura de artículos y visualización de guías de YouTube puede reemplazar la práctica. Sólo creando varios (y realmente varios, no solo uno) proyectos aprenderás algo significativo. Para trazar su camino como programador en el desarrollo de juegos, el objetivo aquí es ir paso a paso, de lo simple a lo complejo.
Intenté dar algunos consejos sobre cómo iniciarse en el desarrollo de juegos y comenzar a programarlos. Elegir el lenguaje y el motor adecuados, la perseverancia y la perseverancia, la recopilación de comentarios y la introspección son todos muy importantes. Pero hay otro componente de este proceso que no se puede descuidar: divertirse.
Si no te apasionan los juegos y no los juegas, lo más probable es que este emprendimiento no salga nada; Una triste verdad que se aplica básicamente a cualquier trabajo creativo. Sin diversión, se convertirá en una simple rutina para ganar dinero. Claro, es posible que pierdas el interés años después de todos modos, pero es de esperar que para entonces ya hayas realizado y puedas elegir entre algún trabajo relacionado, o habrás ganado lo suficiente para hacer algo nuevo e interesante para ti en ese momento.
Especialmente al comienzo de tu viaje, todo trabajo y nada de juego definitivamente te llevará al agotamiento y la decepción.
Por eso, mi último consejo: busca lo que te apasione , lo que te impulse a trabajar en un proyecto durante días y noches (¡por supuesto, no debes hacer esto literalmente!). Una vez que encuentres tu motivación impulsora, aquello que que de otro modo sería una rutina típica, se convertirá en un desafío interesante y atractivo, ¡y esto seguramente acelerará su crecimiento profesional!
También publicado aquí.