Guía de programación de videojuegos - Consejos, herramientas y carreras

por Connor Taylor

Un programador de videojuegos es la persona que toma la visión del diseñador y hace que funcione realmente en el motor del juego que usamos. Trabajo en el equipo de programación de juegos móviles en Kwalee, por lo que para nosotros es principalmente Unity. Por ejemplo, si el diseñador quiere que un dado gire de una manera determinada, escribiré el script para manejar la lógica. También colaboramos con los artistas de videojuegos para que nuestros juegos no solo luzcan increíbles, sino que también logren un excelente rendimiento en el dispositivo.

En este blog, compartiré mis cinco años trabajando en Kwalee para ofrecer conocimientos esenciales y consejos sobre ser programador de videojuegos. Te guiaré a través de algunos de los lenguajes, herramientas y principios que usamos, mis consejos de carrera, así como consejos para principiantes y avanzados.

¿Qué Hace Un Programador De Videojuegos?

Escribimos el código y ayudamos a que el juego se haga realidad. Mientras que los diseñadores de juegos crean los conceptos y los artistas de juegos crean los activos, un programador creará la experiencia funcional y jugable. Creamos y optimizamos el rendimiento del juego y solucionamos cualquier problema que se identifique.

Nos aseguramos de que un juego se sienta genial y funcione con un alto rendimiento. Para hacer esto, debemos asegurarnos de que el código en sí sea limpio y expandible, lo cual es más difícil de lo que piensas. Usamos estándares de codificación para mantener una calidad consistente en todos nuestros equipos, un documento que puede contener estándares de nomenclatura, formato, etc. Sin embargo, a veces las cosas no son siempre tan sencillas y de vez en cuando puedes necesitar pensar fuera de la caja para lograr que las cosas se hagan a tiempo.

Nuestras responsabilidades también incluyen asegurarnos de que el juego funcione bien en el hardware del usuario final. Por ejemplo, en nuestros juegos móviles, necesitamos evitar que los dispositivos más antiguos se calienten demasiado, por lo que trabajamos con artistas para optimizar la cantidad de llamadas de dibujo. Una llamada de dibujo es un comando enviado desde la Unidad Central de Procesamiento (CPU) a la Unidad de Procesamiento Gráfico (GPU) para renderizar un objeto en la pantalla; le dice a la GPU que dibuje elementos gráficos como texturas, mallas o shaders. Necesitamos minimizar la cantidad de estas llamadas de dibujo en nuestro juego porque tener demasiadas puede causar problemas como caídas de fotogramas o tartamudeos. Hay muchas maneras de resolver esto, pero cosas como agrupar múltiples objetos en una sola llamada de dibujo o reducir la cantidad de texturas y materiales únicos pueden ayudar. Esto es especialmente importante para móviles, ya que hay tantos dispositivos diferentes en el mercado, todos con especificaciones técnicas variables.

¿Cuáles Son Los Principales Lenguajes De Programación De Videojuegos?

La mayor parte de nuestro tiempo como programadores de videojuegos se pasa escribiendo scripts en uno de una variedad de lenguajes de programación: después de todo, somos desarrolladores de software de un tipo diferente. Hay muchos lenguajes para elegir. Algunos parecen más fáciles que otros, pero una vez que has aprendido y dominado uno, definitivamente puedes aprender otros: el principal desafío es entrar en el mundo laboral.

Aquí tienes una introducción a algunos de los lenguajes de programación de videojuegos más populares:

  • C# - un lenguaje de programación versátil y popular usado ampliamente en el desarrollo de juegos. Es uno de los más fáciles de aprender si eres principiante. Una de sus mejores características es la recolección de basura automática; maneja la asignación de memoria por ti, muy útil para programadores ocupados como nosotros.
  • C++ - en contraste, este es un lenguaje no gestionado, por lo que debes asignar y desasignar memoria manualmente, lo que lo hace un paso más grande en complejidad y dificultad. Sin embargo, permite mayor velocidad, control y rendimiento.
  • Java - al igual que C#, Java tiene su propia gestión de memoria y recolección de basura, lo que facilita a los desarrolladores manejar la memoria sin perderse en los detalles. Se usa ampliamente en el desarrollo web y aplicaciones empresariales, y aunque puede que no sea la opción número uno para el desarrollo de juegos (discutiblemente), sigue siendo una opción sólida para crear aplicaciones escalables y eficientes.
  • Swift - este es el lenguaje nativo de Apple para construir apps y juegos para iOS y macOS. Sin embargo, esto significa que es menos útil para el desarrollo multiplataforma, ya que nuestro objetivo es siempre publicar nuestros juegos móviles tanto en Android como en iOS.

¿Cómo Te Conviertes En Programador De Videojuegos?

Hay diferentes maneras de convertirse en programador de videojuegos. Mi ruta es bastante convencional: estudié Diseño y Programación de Juegos en la Universidad de Staffordshire. Originalmente, pensé que iba a dedicarme al arte en juegos; siempre fui muy apasionado del arte cuando era niño y disfrutaba mucho los módulos de arte en la universidad, pero mientras estaba allí descubrí que realmente disfrutaba crear jugabilidad. Podría tomarme varios días crear un modelo de alta poligonación, pero podría hacer que un pato volara y explotara en la mitad de tiempo. Prototipar me permite ver el resultado rápidamente delante de mí.

Sin embargo, la belleza de programar juegos es que es accesible para la mayoría de las personas, incluso si no sigue una ruta tradicional. Tenía amigos en la universidad de más de 50 años; nunca es demasiado tarde para experimentar algo nuevo. En Kwalee, incluso hemos contratado a alguien que aprendió principalmente a través de videos de YouTube e hizo un juego por diversión. Hay tantas oportunidades para el talento nuevo y entusiasta hoy en día. Al ver los portafolios de nuevos estudiantes, tienen mucho más bajo la manga. Vemos un talento fantástico surgir y es un momento emocionante en la industria.

Probablemente te interesa saber: ¿afectará la IA a la programación como carrera? Puede ser extremadamente útil y está mejorando. Perfecta si necesitas que te expliquen algo o estás atascado en un problema. Puedes usarla para solucionar errores o refactorizar ("limpiar") tu código pegándolo en el último ChatGPT. Sin embargo, cuando miramos portafolios queremos ver el trabajo que has hecho y del que estás orgulloso, la IA está bien para usar, pero trata de no usarla como un reemplazo de tus propias habilidades.

¿Cómo Es Un Día Típico En La Vida De Un Programador De Videojuegos?

Permíteme dar un ejemplo basado en mi vida. Soy Lead Programmer (lo llamo mi trabajo de ensueño), así que es una gran mezcla de tareas prácticas y dirigir a otros programadores.

Un día típico en mi mundo es llegar, tomar un latte, luego verificar cualquier error o bloqueo para el equipo de QA. Consultar con el equipo para ver si alguien necesita que haga algo para desbloquear su trabajo. Luego, la música se enciende y la lista de tareas se despliega. Compartimos videos de progreso a través de Slack para obtener comentarios rápidos, mientras también saltamos entre 2-3 proyectos para apoyar a los miembros de mi equipo. También pasamos mucho tiempo invirtiendo en sistemas compartidos para que nuestra programación sea más eficiente; todo necesita ser mantenido, actualizado y reparado regularmente para que las cosas funcionen sin problemas.

Consejos Para Principiantes En Programación De Videojuegos

Si estás comenzando y aspiras a ser un programador plenamente desarrollado, aquí tienes mis consejos para principiantes:

  • ¡Hay mucho que aprender en línea, en YouTube, y hay tantos juegos de ejemplo que no tienes excusa para no aprender! Los motores populares son gratuitos y son muy divertidos de usar.
  • En el extremo opuesto del espectro, puede tener 30 años de antigüedad, pero deberías intentar leer el influyente libro "Design Patterns: Elements of Reusable Object-Oriented Software" por los llamados autores de Gang of Four, que introdujo algunas de las bases de los patrones de juegos que usamos diariamente en programación.
  • Puedes tener tus propias ideas, pero asegúrate de comenzar simple para que estés fundamentado con lo básico.
  • Cuando no estás atado a un proyecto comercial, puedes escribir tanto código como quieras, así que diviértete creando cosas locas.
  • Construir un portafolio es realmente clave (y es cómo obtuve mi trabajo). Pero ten mucho cuidado de no solo cargar el mismo trabajo anticuado de la universidad, porque veremos muchas aplicaciones con eso. Incluso pasar un día extra rediseñando y agregando más funciones te ayudará a destacar.
  • Crear tu propio juego del mundo real también es una idea inteligente, es muy barato poner un juego en Google Play, así que publica algo que puedas mostrar a reclutadores/publishers/familiares/mascotas en tu teléfono. Incluso podrías ganar unos miles de dólares al año hasta que estés contratado a tiempo completo, ¡eso es una bonificación! O podrías animarte a hacer tu propio juego completo y asociarte con un publisher.
  • No solo aprendas sobre programación, aprende sobre arte, diseño, QA y otras disciplinas con las que interactuarás. Por ejemplo, vale la pena entender los métodos de QA porque puedes caer en la trampa de asumir que algo funciona, pero necesitas jugarlo como usuario, no como alguien que escribió el código y tiene una visión definida de cómo esperas que "debería jugarse". Sé destructivo, intenta las cosas al azar que la gente podría hacer, presionando botones al azar y otros comportamientos extraños.

Consejos Avanzados Para Programadores

Aquí tienes algunos de los consejos que me han ayudado a pasar de junior a programador, a senior, a líder.

  • Siempre puedes beneficiarte de más aprendizaje, y recuerda que sin errores no podemos aprender.
  • Si eres realmente apasionado por algo, podrás convertirte en más especializado. Por ejemplo, si te encanta jugar con shaders y pipelines de renderizado, aprende más sobre cómo usar shaders gráficos para expandir tu capacidad de renderizar efectos visuales complejos y usa pipelines de renderizado para optimizar el rendimiento o hacer algunos efectos impresionantes.
  • Podrías hacer algo realmente genial, como un sistema complejo, subirlo a una tienda de activos para exhibirlo si tu contrato lo permite y mostrar tu trabajo avanzado. Podrías desarrollar un nicho como cierto tipo de programador, como programador de jugabilidad, programador de servidores, programador de gráficos o programador multijugador.
  • Alternativamente, puedes seguir la ruta de gestión como yo, y guiar a las personas. Mi táctica para avanzar en mi carrera ha sido asumir nuevas responsabilidades. Primero, comencé mejorando cosas pequeñas, es decir, pequeños cambios en el flujo de trabajo. Luego, hice que los procesos fueran más fáciles usando plantillas para ahorrar tiempo al crear nuevos proyectos. Luego obtuve un gusto por la mentoría y la gestión, lo que me ayudó a ganar más confianza y ahora participo en revisiones entre colegas, revisiones de código, organizando talleres y liderando equipos en proyectos.

Ya sea que trabajes como parte de un equipo o como gerente, es tan importante dar elogios como lo es dar críticas constructivas. Cuando revises el código, ¡es bueno motivar a las personas!

¿Cuáles Son Los Principios Clave De La Programación De Videojuegos?

Hay algunos temas clave que simplemente deben incluirse en un blog sobre la programación de videojuegos. Estos son algunos de los aspectos más importantes que consideramos.

Control de versiones

Así como tienes puntos de guardado en los juegos, hay puntos de guardado en el desarrollo de proyectos. Actúan como almacenamiento general para el proyecto y significan que tres o cuatro programadores pueden trabajar en un sistema simultáneamente, crear un cambio y enviarlo al servidor. Nos permite rastrear esos cambios y revertirlos fácilmente si algo se rompe. Si dos desarrolladores trabajan en el mismo archivo, ese archivo pasará a formar parte de una fusión; si hay conflictos, podemos resolverlos manualmente o elegir los cambios de un individuo para aplicarlos. Esto ocurre mucho al usar Prefabs o Scenes dentro de Unity.

Estos términos a veces se superponen, pero generalmente, el control de código fuente se enfoca en el código y el control de versiones incluye todos los archivos del proyecto, activos y documentación.

Cuando comienzas a usar el Control de Versiones, puede parecer un poco aterrador al principio, puede parecer muy abrumador y cuando se trata de conflictos, puede que te encuentres inseguro sobre qué hacer. Pero la naturaleza del control de versiones te ayuda a guardar momentos en el tiempo, por lo que si estás actualizando frecuentemente y usando mensajes de commit detallados, es increíblemente útil y seguro. Puedes revertir a puntos múltiples, tener múltiples ramas, etc. Piensa en ello como la red de seguridad de los desarrolladores, para que podamos evitar una versión de Toy Story 2 de Pixar: accidentalmente eliminada y luego recuperada de un disco duro en casa de su Director Técnico; en cambio, todo está seguramente allí en el servidor.

Programación Orientada a Objetos

Este es el tipo de programación que usamos principalmente en Kwalee. Utiliza objetos para representar cosas reales o conceptos abstractos y tiene como objetivo organizar la base de código usando principios que reflejan cómo vemos e interactuamos con los objetos en el mundo real. Ayuda a mantener sistemas complejos organizando el código en clases distintas que puedes reutilizar, escalar y mantener más fácilmente.

Por supuesto, hay debate sobre si es bueno o no. Aunque no es el de mejor desempeño, funciona bien. Al igual que con los lenguajes, cada uno tiene sus propios pros y contras y debes aprender uno para comenzar y familiarizarte con cómo funcionan los lenguajes y los compiladores (traductores de código humano a código máquina). También puedes considerar otros tipos, como la programación funcional que la trata más como matemáticas, programación lógica que usa hechos y reglas o programación procedural que usa datos paso a paso.

Patrones de Programación

Estas son cosas maravillosamente útiles: soluciones reutilizables que pueden ayudar con problemas comunes que enfrentarás en tu diseño de software. Te dan una plantilla para resolver un problema, para que no tengas que reinventar la rueda cada vez y puedas seguir soluciones probadas.

Por ejemplo, el patrón de diseño Singleton te ayuda a asegurarte de que solo hay una instancia de una clase, como un administrador de configuraciones de juego, en todo el juego y te da un punto de acceso global a ella. El código para este patrón significa que solo hay una instancia de la clase SettingsManager, por lo que no necesitas recrearla o duplicarla cada vez que la necesites.

También está el Patrón de Fábrica, que puede ayudarte a crear objetos de una manera más organizada y flexible. Puedes definir métodos para generar tipos específicos de objetos, como personajes o ítems, basados en parámetros de entrada, permitiéndote crear más objetos de un tipo similar sin comenzar desde cero cada vez.

Espero que este blog te haya dado un gusto por la programación de videojuegos, ya sea que seas nuevo en el campo o un programador experimentado. Si eres una persona trabajadora pero divertida, encajarías en nuestro equipo, así que descubre más sobre carreras en Kwalee. De lo contrario, puedes aprender sobre nuestros juegos móviles o publicaciones y conocer más sobre lo que lanzamos como desarrolladores y editores.

Acerca del autor:

Connor Taylor, Programador Principal de Juegos en Kwalee, se destaca por hacer videojuegos y fomentar un equipo divertido y de apoyo. Con más de 5 años de experiencia, ha creado éxitos como Jetpack Jump y asesora a otros en el desarrollo de Unity.

Compartir este artículo: