Un programador de juegos es quien toma la visión del diseñador y la hace funcionar 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, escribiré el script para manejar la lógica. También colaboramos con artistas de juegos para asegurarnos de que nuestros juegos se vean increíbles pero también logren un gran rendimiento en el dispositivo.
En este blog, compartiré conocimientos y consejos esenciales sobre ser programador de juegos, basándome en mis cinco años trabajando en Kwalee. 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 los diseñadores 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.
Aseguramos que un juego se sienta genial y funcione con alto rendimiento. Para hacer 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 nomenclatura, formato, etc. Sin embargo, a veces las cosas no son siempre tan sencillas y de vez en cuando es posible que necesites pensar fuera de la caja para hacer 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, por lo que trabajamos con artistas para optimizar el número 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; indica a la GPU que dibuje elementos gráficos como texturas, mallas o sombreadores. Debemos minimizar el número de estas llamadas de dibujo en nuestro juego porque tener demasiadas puede causar problemas como caídas de velocidad de fotogramas 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 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 al 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 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 debes asignar y desalojar memoria manualmente, lo que lo hace 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 complicarse demasiado en los detalles. Es ampliamente utilizado en desarrollo web y aplicaciones empresariales, y aunque puede (debatiblemente) no ser la opción principal 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 Android y iOS.
¿Cómo Te Conviertes En Programador De Juegos?
Hay diferentes formas de convertirte en programador de juegos. Mi camino es bastante convencional: estudié Diseño y Programación de Juegos en la Universidad de Staffordshire. Originalmente, pensé que me dedicaría al arte de juegos, siempre fui muy apasionado por el arte desde niño, además disfruté mucho 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 podría hacer que un pato vuele y explote en la mitad de 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 vienes por una ruta tradicional. Tuve 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 talento nuevo y entusiasta hoy en día. Al ver portafolios de estudiantes más nuevos, tienen tanto bajo el brazo. Vemos un talento fantástico surgir y es un momento emocionante en la industria.
Una pregunta que probablemente tengas: ¿afectará la IA la programación como carrera? Puede ser extremadamente útil y está mejorando. Perfecto si necesitas que algo te sea explicado o si 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, está bien usar IA, 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 tareas prácticas y gestión de 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 comienza 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 hacer nuestra programación más eficiente; todo necesita ser mantenido, actualizado y arreglado regularmente para mantener las cosas funcionando sin problemas.
Consejos Para Principiantes En Programación De Juegos
Si estás comenzando y aspiras a ser un programador completo, ¡aquí tienes mis consejos para principiantes!
- Hay tanto 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, pero deberías intentar leer el influyente libro "Design Patterns: Elements of Reusable Object-Oriented Software" de los llamados autores Gang of Four, que introdujo algunos de los fundamentos de los patrones de juego que usamos todos los días en programación.
- Puede que tengas tus propias ideas, pero asegúrate de comenzar simple para que estés fundamentado con los conceptos básicos.
- Cuando no estás atado a un proyecto comercial, puedes escribir tanto código como quieras, así que diviértete mucho creando cosas insanas.
- Crear 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 universidad, porque veremos muchas aplicaciones con estos. Incluso pasar un día extra reskinning y agregando más características te ayudará a destacar.
- Crear tu propio juego del mundo real también es una idea inteligente, es muy barato obtener un juego en Google Play, así que lanza algo que puedas mostrar a reclutadores/publicadores/familiares/mascotas en tu teléfono. Incluso puedes ganar unos miles de dólares al año hasta que te establezcas con un trabajo de tiempo completo exclusivo, ¡eso es una ventaja! 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 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 aleatorias que las personas podrían hacer, presionando botones aleatoriamente 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ías volverte más especializado. Por ejemplo, si te encanta jugar con sombreadores y pipelines de renderizado, aprende más sobre cómo usar sombreadores gráficos para expandir tu capacidad para renderizar efectos visuales complejos y usar pipelines de renderizado para optimizar el rendimiento o hacer efectos asombrosos.
- 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 de gráficos o programador multijugador.
- Alternativamente, puedes seguir la ruta de gestión como yo, y mentorizar 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, pequeños cambios en los flujos de trabajo. Luego hice procesos más fáciles usando plantillas para ahorrar tiempo al crear nuevos proyectos. Luego tuve 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 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 lo es dar críticas constructivas. Al revisar 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 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 permiten que tres o cuatro programadores trabajen en un sistema simultáneamente, creen un cambio y lo envíen al servidor. Nos permite rastrear esos cambios y retroceder fácilmente si algo se rompe. 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 versiones incluye todos los archivos del proyecto, activos y documentación.
Cuando comienzas a usar Control de Fuente puede parecer un poco aterrador al principio, puede parecer muy abrumador y cuando se trata de conflictos puedes encontrarte 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 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, eliminada accidentalmente y luego recuperada de un disco duro en la 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 usamos principalmente en Kwalee. Utiliza objetos para representar cosas reales o conceptos abstractos, y tiene como objetivo 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 más alto en rendimiento, funciona bien. Al igual que con los lenguajes, cada uno tiene sus propios pros y contras y deberías aprender uno para comenzar y entender 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 programación funcional que lo 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 el diseño de software. Te dan un modelo para solucionar 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 asegurar que solo hay una instancia de una clase como un gestor de configuraciones del 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 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 juegos, 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 publicación y conocer más sobre lo que lanzamos como desarrollador y publicador.








