Un programador de juegos es la persona que toma la visión de un diseñador y logra que funcione realmente en el motor de juego que usamos. Trabajo en el equipo de programación de juegos móviles en Kwalee, así que para nosotros principalmente es Unity. Por ejemplo, si el diseñador quiere que un dado ruede de una manera particular, escribiré el script para manejar la lógica. También colaboramos con artistas de juegos para asegurarnos de que nuestros juegos lucen increíbles pero también logran un gran rendimiento en el dispositivo.
En este blog, voy a compartir 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 usamos, 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 haga realidad. Mientras que los diseñadores de juegos crean los conceptos y los artistas de juegos crean los assets, un programador creará la experiencia funcional y jugable. Creamos y optimizamos el rendimiento del juego y solventamos cualquier problema que se identifique.
Nos aseguramos de que un juego se sienta genial y funcione con un alto rendimiento. Para lograr esto, debemos asegurar 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 nombrado, 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 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 calienten demasiado, así que trabajamos con artistas para optimizar el número de llamadas de dibujo. Una llamada de dibujo es un comando enviado de 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 el número de estas llamadas de dibujo en nuestro juego porque tener demasiadas puede causar problemas como caídas de tasa de frames o cortes. 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 día a día 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 introducirse 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 ampliamente utilizado en el desarrollo de juegos. Es uno de los más fáciles de aprender si eres un 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, así que tienes que asignar y desasignar memoria manualmente, lo que lo convierte en un paso más grande 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 demasiado en los detalles. Se usa ampliamente en el desarrollo web y aplicaciones empresariales, y aunque puede que no sea (discutiblemente) la opción top 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 publicar siempre nuestros juegos móviles en ambos, Android e iOS.
¿Cómo Convertirse En Un Programador De Juegos?
Hay varias maneras de convertirse 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 dedicarme al arte de los juegos - siempre fui muy apasionado por el arte de niño, además realmente disfruté los módulos de arte en la universidad, pero mientras estaba allí descubrí que realmente disfrutaba creando jugabilidad. Podía tomarme varios días para crear un modelo de alto polímero, pero podía hacer que un pato volara y explotara en la mitad del tiempo. Prototipar me permite ver el resultado rápidamente justo frente a mí.
Sin embargo, la belleza de programar juegos es que es accesible para la mayoría de las personas incluso si no provienes de una ruta tradicional. Tuve amigos en la universidad mayores de 50 años - nunca es 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. Hoy en día hay muchas oportunidades para talentos nuevos y entusiastas. Al observar portafolios de estudiantes más nuevos, tienen mucho más a su haber. Vemos talento fantástico que llega y es un momento emocionante en la industria.
Una pregunta que probablemente estás deseando hacer: ¿afectará la IA la programación como una carrera? Puede ser extremadamente útil, y está mejorando. Perfecto si necesitas que se explique algo o estás atascado en un problema. Puedes usarlo 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 para tus propias habilidades.
¿Cuál Es Un Día Típico En La Vida De Un Programador De Juegos?
Permíteme darte 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 gestión de otros programadores.
Un día típico en mi mundo es llegar, tomar un latte y luego verificar cualquier error o bloqueo para el equipo de control de calidad. Consultar con el equipo para ver si alguien necesita que haga algo para desbloquear su trabajo. Luego la música comienza y la lista de tareas aparece. Compartiremos videos de progreso vía Slack para recibir comentarios rápidos, mientras también saltamos entre 2-3 proyectos para apoyar a 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 reparado 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 total, aquí van mis consejos para principiantes.
- Hay tanto para 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 completamente 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 autores denominados Gang of Four, que introdujeron algunas de las bases de los patrones de juegos que usamos todos los días en la programación.
- Puedes tener tus propias ideas, pero asegúrate de empezar simple para que estés enraizado con lo básico.
- Cuando no estás atado a un proyecto comercial, puedes escribir tanto código como desees, 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 subir el mismo trabajo estándar de la uni, porque veremos muchas aplicaciones con estos. Incluso al pasar un día extra en cambiar el aspecto y agregar más funciones, ayudarás a destacarte.
- 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/publicadores/familiares/mascotas en tu teléfono. Incluso podrías ganar unos cuantos miles de dólares al año hasta que estés establecido con un trabajo exclusivo a tiempo completo, ¡eso es un bono! O podría tentarte a hacer tu propio juego completo y asociarte con un publicador.
- 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 un 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 aleatorias que las personas podrían hacer, presionando botones al azar y otros comportamientos extraños.
Consejos Para Programadores Avanzados
Aquí tienes algunos de los consejos que me han ayudado a pasar de ser junior, a programador, a senior, a líder.
- 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 usar pipelines de renderizado para optimizar el rendimiento o para hacer algunos efectos impresionantes.
- Podrías hacer algo realmente genial, como un sistema complejo, subirlo a una tienda de activos para mostrarlo si tu contrato lo permite y mostrar tu trabajo avanzado. Podrías desarrollar un nicho como un tipo particular de programador, como programador de jugabilidad, programador de servidores, programador gráfico o programador multijugador.
- Alternativamente, puedes seguir la ruta de gestión como yo, y mentor a personas. Mi táctica para progresar en mi carrera ha sido absorber nuevas responsabilidades. Primero, comencé mejorando cosas más pequeñas, es decir, cambios en el flujo de trabajo más pequeños. Luego hice que los procesos fueran más fáciles usando plantillas para ahorrar tiempo al crear nuevos proyectos. Luego adquirí un gusto por el mentorazgo y la gestión, lo que me ayudó a ganar más confianza y ahora participo en revisiones entre pares, revisiones de código, organización de talleres y liderazgo de equipos en proyectos.
Ya sea 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 animar a las personas!
¿Cuáles Son Los Principios Clave De La Programación De Juegos?
Hay algunos temas clave que simplemente tienen que entrar en un blog sobre programación de juegos. Estas son algunas de las cosas más importantes que consideramos.
Control de Fuente/Control de Versiones
Así como tienes puntos de guardado en los juegos, hay puntos de guardado en el desarrollo del proyecto. 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, entonces podemos resolverlos manualmente o seleccionar los cambios de un individuo para aplicar. Esto sucederá mucho al usar Prefabs o Escenas dentro de Unity.
Estos términos a veces se superponen, pero en general, el control de fuente se enfoca en el código y el control de versiones incluye todos los archivos del proyecto, assets y documentación.
Cuando comienzas a usar el Control de Fuente, puede parecer un poco aterrador al principio, puede parecer muy abrumador y cuando hay conflictos, puedes encontrar que no estás seguro de qué hacer. Pero la naturaleza del control de versiones te ayuda a guardar momentos en el tiempo, por lo que si actualizas con frecuencia y usas mensajes de commit detallados, es increíblemente útil y seguro. Puedes revertir a múltiples puntos, 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 borrada y luego recuperada de un disco duro en el hogar de su Director Técnico, en su lugar está todo de forma segura en el servidor.
Programación Orientada a Objetos
Este es el tipo de programación que usamos principalmente en Kwalee. Usa objetos para representar cosas reales o conceptos abstractos, y trata de 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 rendimiento, funciona bien. Al igual que con los lenguajes, cada uno tiene sus pros y contras y debes aprender uno para comenzar y tener una idea de cómo funcionan los lenguajes y compiladores (traductores de código humano a código de máquina). También puedes considerar otros tipos, como la programación funcional que la trata más como matemáticas, la programación lógica que usa hechos y reglas o la programación procedural que usa pasos secuenciales de datos.
Patrones de Programación
Estas son cosas maravillosamente útiles: soluciones reutilizables que pueden ayudarte con problemas comunes que enfrentarás en el diseño del software. Te dan una plantilla para solucionar un problema, para que no tengas que reinventar la rueda cada vez y puedas seguir soluciones comprobadas.
Por ejemplo, el patrón de diseño Singleton te ayuda a garantizar que solo haya una instancia de una clase como un administrador de configuraciones 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 existe una instancia de la clase SettingsManager, por lo que no necesitas recrearla o duplicarla cada vez que lo 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 elementos, basados en parámetros de entrada, lo que te permite crear 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 descubre 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 publicador.








