Guía de Programación de Juegos - Consejos, Herramientas y Carreras

por Connor Taylor

Un programador de juegos es la persona que toma la visión del diseñador y hace que realmente funcione en el motor de juego que usamos. Trabajo en el equipo de programación de juegos móviles en Kwalee, así que para nosotros es principalmente Unity. Por ejemplo, si el diseñador quiere que un dado ruede de una manera particular, yo escribo el script para manejar la lógica. También colaboramos con los artistas del juego para asegurarnos de que nuestros juegos no solo se vean increíbles, sino que también tengan un gran rendimiento en el dispositivo.

En este blog, me basaré en mis cinco años trabajando en Kwalee para compartir ideas y consejos esenciales sobre ser un programador de juegos. Te guiaré a través de algunos de los lenguajes, herramientas y principios que utilizamos, mis consejos de carrera, así como consejos para principiantes y avanzados.

¿Qué Hace Un Programador De Juegos?

Escribimos el código y ayudamos a que el juego se convierta en una realidad. Mientras los diseñadores de juegos crean los conceptos y los artistas crean los recursos, 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 lograr esto, tenemos que asegurarnos de que el código en sí sea limpio y extensible, 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 puede ser necesario pensar fuera del marco para lograr las cosas 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 sobrecalienten, por lo que trabajamos con los 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 cuadros o tartamudeo. Hay muchas formas de resolver esto, pero cosas como agrupar múltiples objetos en una sola llamada de dibujo o reducir el número 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 variadas.

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

La mayor parte de nuestro tiempo como programadores de juegos diarios lo pasamos 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 conseguir entrar en el campo.

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

  • C# - un lenguaje de programación versátil y popular utilizado 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 automática de basura - así que gestiona 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 tienes que asignar y liberar memoria manualmente, lo que lo convierte en un paso mayor en complejidad y dificultad. Sin embargo, permite una 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 atascarse en los detalles. Es ampliamente utilizado en desarrollo web y aplicaciones empresariales, y aunque (según se argumenta) no sea la mejor opción para el desarrollo de juegos, 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 en Android e iOS.

¿Cómo Te Conviertes En Un Programador De Juegos?

Hay una variedad de formas diferentes de convertirte en un programador de juegos. Mi ruta es bastante convencional - estudié Diseño y Programación de Juegos en la Universidad de Staffordshire. Originalmente pensé que iba a entrar en el arte de videojuegos - siempre fui muy apasionado por el arte cuando era niño, además realmente disfruté los módulos de arte en la universidad, pero mientras estaba allí descubrí que realmente disfrutaba creando jugabilidad. Podría tomarme varios días crear un solo modelo de alta poligonización, pero podía hacer que un pato volara y explotara en la mitad del tiempo. Prototipar me permite ver el resultado rápidamente frente a mí.

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

Una pregunta que probablemente estés ansioso por hacer - ¿afectará la IA la programación como carrera? Puede ser extremadamente útil, y está mejorando. Perfecto 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 Juegos?

Permíteme dar un ejemplo basado en mi vida. Soy un Programador Líder (lo llamo mi trabajo soñado) ¡así que es una gran mezcla de trabajo práctico y de gestión de otros programadores!

Un día típico en mi mundo es llegar, tomar un café con leche, luego revisar dos veces 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 nos movemos entre 2-3 proyectos para apoyar a los miembros de mi equipo. También pasamos mucho tiempo invirtiendo en sistemas compartidos para hacer nuestra programación más eficiente - todo necesita ser mantenido, actualizado y arreglado regularmente para mantener las cosas funcionando sin problemas.

Consejos De Programación De Juegos Para Principiantes

Si estás comenzando y aspiras a ser un programador completo, ¡aquí tienes mis consejos para principiantes!

  • Hay mucho para aprender en línea, en YouTube y hay tantos juegos de ejemplo que no tienes excusa para no aprender. ¡Los motores populares son gratis y son muy divertidos de usar!
  • En el extremo opuesto del espectro, puede tener 30 años, pero deberías intentar leer el influyente libro "Design Patterns: Elements of Reusable Object-Oriented Software" por los llamados autores Gang of Four, que introdujo algunos de los fundamentos de patrones de juegos que usamos todos los días 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 como conseguí mi trabajo). Pero ten mucho cuidado de no solo cargar el mismo trabajo estándar de la uni, porque veremos muchas aplicaciones con estos. Incluso pasar un día extra cambiando la apariencia 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 lanza algo que puedas mostrar a reclutadores/editoras/familiares/mascotas en tu teléfono. Incluso podrías ganar un par de miles de dólares al año hasta que te establezcas con un trabajo a tiempo completo exclusivo, ¡eso es un bono! O podría tentarte a crear tu propio juego completo y asociarte con una editorial.
  • 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, prueba las cosas al azar que la gente podría hacer, presiona botones al azar y otro comportamiento extraño.

Consejos Avanzados Para Programadores

Aquí te dejo algunos de los consejos que me han ayudado a pasar de junior, a programador, a senior al liderazgo.

  • Siempre puedes beneficiarte de más aprendizaje, y recuerda que sin errores no podemos aprender.
  • Si realmente te apasiona algo - podrías especializarte más. 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 utilizar pipelines de renderizado para optimizar el rendimiento o para hacer efectos impresionantes.
  • Podrías crear algo realmente genial, como un sistema complejo, subirlo a una tienda de activos para mostrarlo si tu contrato lo permite y presumir de tu trabajo avanzado. Podrías desarrollar un nicho como un tipo particular de programador, como programador de jugabilidad, programador de servidor, programador de gráficos o programador de multijugador.
  • Alternativamente, puedes tomar el camino de gestión como yo, y mentorizar a las personas. Mi táctica para avanzar en mi carrera ha sido absorber nuevas responsabilidades. Primero, comencé mejorando cosas más pequeñas, es decir, pequeños cambios de flujo de trabajo, y luego hice que los procesos sean más fáciles utilizando plantillas para ahorrar tiempo cuando se crean nuevos proyectos. Luego probé el gusto por la mentoría y la gestión, lo que me ayudó a ganar más confianza y ahora participo en revisiones por pares, revisiones de código, organizo talleres y lidero equipos en proyectos.

Ya sea que estés trabajando como parte de un equipo o como gerente, es tan importante dar elogios como dar críticas constructivas. Al revisar el código, ¡es bueno motivar a las personas!

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

Hay algunos temas clave que simplemente tienen que ir en un blog que cubre la programación de juegos. Estos son algunos de los aspectos más importantes que consideramos.

Control de Fuente/Control de Versión

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 retroceder fácilmente si algo se rompiera. Si dos desarrolladores trabajan en el mismo archivo, ese archivo se convertirá en parte de una fusión, si hay conflictos, podemos resolverlos manualmente o elegir los cambios de un individuo para aplicarlos. Esto sucederá mucho al usar Prefabs o Escenas dentro de Unity.

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

Cuando comienzas a usar el Control de Fuente puede resultar un poco aterrador al principio, puede parecer muy abrumador y cuando llegas a los conflictos puede que te encuentres inseguro sobre qué hacer. Pero la naturaleza del control de versión 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 regresar a múltiples puntos, tener múltiples ramas, etc. Piénsalo como la red de seguridad de los desarrolladores, para que podamos evitar una versión del Toy Story 2 de Pixar - accidentalmente eliminada y luego recuperada de un disco duro en casa de su Director Técnico, en su lugar todo está seguro en el servidor.

Programación Orientada a Objetos

Este es el tipo de programación que principalmente usamos en Kwalee. Usa objetos para representar cosas reales o conceptos abstractos, y apunta a organizar la base de código utilizando 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 mayor rendimiento, funciona bien. Así como con los lenguajes, cada uno tiene sus propios pros y contras y deberías aprender uno para comenzar y obtener una noción de cómo funcionan los lenguajes y compiladores (traductores de código humano a código máquina). También puedes considerar otros tipos, como la programación funcional que lo trata más como matemáticas, programación lógica que utiliza hechos y reglas o programación procedural que utiliza 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 brindan una plantilla para solucionar un problema, para que no tengas que reinventar la rueda cada vez y puedas seguir soluciones probadas.

Por ejemplo, el patrón Singleton te ayuda a asegurar que haya solo una instancia de una clase, como un gestor de configuración de juego en todo tu juego, y te da un punto de acceso global a él. El código para este patrón significa que solo una instancia de la clase SettingsManager existe, por lo que no necesitas recrearla o duplicarla cada vez que la necesitas.

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 fácilmente más objetos de un tipo similar sin empezar desde cero cada vez.

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

Acerca del autor:

Connor Taylor, Lead Game Programmer en Kwalee, disfruta crear juegos y fomentar un equipo divertido y de apoyo. Con más de 5 años de experiencia, ha creado éxitos como Jetpack Jump y guía a otros en el desarrollo en Unity.

Compartir este artículo: