Программист игр - это человек, который воплощает видение дизайнера в реальность, заставляя его работать в игровом движке, который мы используем. Я работаю в команде по программированию мобильных игр в компании Kwalee, и для нас это в первую очередь Unity. Например, если дизайнер хочет, чтобы кубик катился определенным образом, я напишу скрипт для обработки этой логики. Мы также сотрудничаем с художниками игр, чтобы наши игры не только выглядели потрясающе, но и демонстрировали отличную производительность на устройстве.
В этом блоге я поделюсь важными знаниями и советами о том, как быть программистом игр, основываясь на своем пятилетнем опыте работы в Kwalee. Я расскажу вам о некоторых языках, инструментах и принципах, которые мы используем, а также дам советы по карьере и начальным и продвинутым уровням.
Чем занимается программист игр?
Мы пишем код и помогаем игре стать реальностью. В то время как игровые дизайнеры создают концепции, а художники - ресурсы, программист создает функциональный, играбельный опыт. Мы создаем и оптимизируем производительность игры и устраняем любые выявленные проблемы.
Мы обеспечиваем, чтобы игра была приятной и работала с высокой производительностью. Для этого мы должны гарантировать, что сам код чистый и расширяемый, что сложнее, чем кажется. Мы используем стандарты кодирования для поддержания постоянного качества во всех наших командах - документ, который может содержать стандарты наименования, форматирование и т. д. Однако иногда все не так просто, и время от времени вам может понадобиться нестандартное мышление, чтобы выполнить задачи вовремя.
Наши обязанности также включают обеспечение хорошей работы игры на аппаратных средствах пользователя. Например, в наших мобильных играх мы должны избегать перегрева устаревших устройств, поэтому мы работаем с художниками над оптимизацией числа вызовов отрисовки. Вызов отрисовки - это команда, отправляемая от центрального процессора (CPU) к графическому процессору (GPU) для отрисовки объекта на экране; она сообщает GPU, чтобы тот отрисовал графические элементы, такие как текстуры, меши или шейдеры. Мы должны минимизировать количество таких вызовов в нашей игре, поскольку их избыток может вызвать такие проблемы, как падение частоты кадров или заикания. Существует множество способов решения этой проблемы, например, объединение нескольких объектов в один вызов отрисовки или уменьшение числа уникальных текстур и материалов, могут помочь. Это особенно важно для мобильных устройств, поскольку на рынке существует много различных устройств с различными техническими характеристиками.
Какие основные языки программирования для игр?
Большинство времени, как программисты игр, мы проводим, пишя сценарии на одном из множества языков программирования - в конце концов, мы разработчики программного обеспечения другого типа. Существует много языков на выбор. Некоторые кажутся легче других, но как только вы выучите и овладеете одним, вы определенно сможете освоить другие - основная сложность заключается в том, чтобы вступить в дверь.
Вот введение в некоторые из самых популярных языков программирования для игр:
- C# - универсальный и популярный язык программирования, широко используемый в разработке игр. Он один из самых простых для начинающих. Одной из его лучших особенностей является автоматическая сборка мусора - он управляет вами распределением памяти, что очень полезно для занятых программистов, таких как мы.
- C++ - напротив, это неуправляемый язык, поэтому вам нужно вручную распределять и удалять память, что делает его более сложным и трудным. Однако он позволяет добиться большей скорости, контроля и производительности.
- Java - как и C#, Java имеет собственное управление памятью и сборку мусора, что облегчает разработчикам работу с памятью, не углубляясь в детали. Он широко используется в веб-разработке и корпоративных приложениях, и, хотя, возможно, это не лучший выбор для разработки игр, он остается надежным вариантом для создания масштабируемых и эффективных приложений.
- Swift - это родной язык Apple для создания приложений и игр для iOS и macOS. Однако это означает, что он менее полезен для кроссплатформенной разработки, поскольку мы всегда стремимся публиковать наши мобильные игры как на Android, так и на iOS.
Как стать программистом игр?
Существует множество разных способов стать программистом игр. Мой путь довольно традиционный - я изучал дизайн и программирование игр в Университете Стаффордшира. Первоначально я думал, что займусь художественной частью игры - с детства я был очень увлечен искусством, и мне очень нравились художественные модули в университете, но в процессе я обнаружил, что мне очень нравится создание игрового процесса. Мне могло потребоваться несколько дней, чтобы создать одну высокополигональную модель, но я мог заставить утку летать и взрываться в два раза быстрее. Прототипирование позволяет мне быстро увидеть результат прямо передо мной.
Однако прелесть разработки игр заключается в том, что она доступна большинству людей, даже если вы не прошли традиционный путь. У меня были друзья в университете, которым было более 50 лет - никогда не поздно попробовать что-то новое. В Kwalee мы даже наняли человека, который в основном учился с помощью видео на YouTube и сделал игру для удовольствия. Сегодня для новых и увлеченных талантов существует множество возможностей. Смотря на портфолио студентов, в их арсенале уже много чего есть. Мы видим приход удивительных талантов, и это захватывающее время в индустрии.
Вы, вероятно, хотите задать вопрос - повлияет ли искусственный интеллект на программирование как карьеру? Он может быть чрезвычайно полезен и становится лучше. Он идеален, если вам нужно что-то объяснить или вы сталкиваетесь с проблемой. Вы можете использовать его для поиска ошибок или рефакторинга ("очистки") вашего кода, вставляя его в последний ChatGPT. Однако, рассматривая портфолио, мы хотим видеть работу, которую вы сделали и которой гордитесь, ИИ можно использовать, но старайтесь не заменять свои навыки.
Каков типичный день в жизни программиста игр?
Позвольте мне привести пример на основе собственной жизни. Я ведущий программист (я называю это своей работой мечты), поэтому это отличное сочетание практической работы и управления другими программистами!
Типичный день в моем мире - это прийти, взять латте и затем проверить наличие ошибок или блокировок для команды контроля качества. Связаться с командой, чтобы выяснить, нужно ли кому-то что-то от меня для разблокировки их работы. Потом музыка включается, а список задач идет вперед. Мы делимся видео с прогрессом через Slack, чтобы быстро получить отзывы, а также переключаемся между 2-3 проектами, поддерживая членов моей команды. Мы также тратим много времени на инвестирование в общие системы, чтобы сделать наше программирование более эффективным - все это нужно регулярно поддерживать, обновлять и исправлять для поддержания плавной работы.
Советы по программированию игр для начинающих
Если вы только начинаете и хотите стать полноценным программистом, вот мои начальные советы!
- В Интернете, на YouTube есть так много информации и примеров игр, что у вас нет оправдания, чтобы не учиться! Популярные движки бесплатны и очень веселы в использовании!
- На противоположном конце спектра, хотя это и было 30 лет назад, вы должны попробовать прочитать влиятельную книгу "Схемы проектирования: элементы многократно используемого объектно-ориентированного программного обеспечения" от Группы Четырех, в которой введены некоторые основы игровых схем, которые мы используем каждый день в программировании.
- У вас могут быть собственные идеи, но убедитесь, что вы начинаете с простого, чтобы освоить основы.
- Когда вы не привязаны к коммерческому проекту, вы можете написать столько кода, сколько захотите, так что получайте удовольствие, создавая невероятные вещи.
- Создание портфолио действительно важно (и именно так я получил свою работу). Но будьте очень осторожны, чтобы не загружать все тот же старый стандартный университетский проект, потому что мы видим много приложений с такими. Даже потратив еще один день на изменение визуального стиля и добавление больше функций, вы сможете выделиться.
- Создание собственной реальной игры - также разумная идея - это очень дешево, чтобы выложить игру в Google Play, так что выпустите что-то, что можете показать рекрутерам/издателям/семье/домашним животным на вашем телефоне. Возможно, вы даже заработаете несколько тысяч долларов в год, пока не устроитесь на полную ставку, это бонус! Или это может подтолкнуть вас к созданию собственной полноценной игры и партнерству с издателем.
- Не ограничивайтесь изучением программирования - изучайте искусство, дизайн, обеспечение качества и другие дисциплины, с которыми вы будете взаимодействовать. Например, стоит понять методы обеспечения качества, потому что можно попасть в ловушку, предполагая, что что-то работает, но нужно играть как пользователь, а не как человек, который написал код и имеет определенное представление о том, как вы ожидаете «должно быть сыграно». Будьте деструктивными, пробуйте произвольные вещи, которые могут делать люди, нажимайте на случайные кнопки и выполняйте другие странные действия.
Советы для опытных программистов
Вот некоторые из советов, которые помогли мне пройти путь от младшего программиста до ведущего.
- Вы всегда можете извлечь пользу из обучения и помнить, что без ошибок мы не сможем учиться!
- Если вы действительно увлечены чем-то, вы можете стать более специализированным. Например, если вам нравится возиться с шейдерами и рендеринговыми пайплайнами, изучайте, как использовать графические шейдеры для расширения вашей способности визуализировать сложные визуальные эффекты и как использовать рендериновые пайплайны для оптимизации производительности или создания удивительных эффектов.
- Вы можете создать что-то действительно крутое, например сложную систему, загрузить это в магазин ассетов, чтобы показать это, если ваш контракт позволяет, и продемонстрировать вашу продвинутую работу. Вы можете развить нишу как конкретный тип программиста, например, программист игрового процесса, серверный программист, графический программист или программист многопользовательских игр.
- В качестве альтернативы, вы можете пойти по пути управления как я, и наставлять людей. Моя тактика продвижения по карьере заключалась в том, чтобы взять на себя дополнительные обязанности. Сначала я начал улучшать мелкие вещи, то есть небольшие изменения в рабочем процессе.. Затем я упростил процессы, используя шаблоны для экономии времени при создании новых проектов. Затем я попробовал себя в наставничестве и управлении, что помогло мне приобрести больше уверенности, и теперь я участвую в рецензиях от коллег, обзорах кода, провожу воркшопы и руковожу командами на проектах.
Будь вы участником команды или менеджером, так же важно выражать похвалу, как и давать конструктивную критику. При обзоре кода, важно подбадривать людей!
Какие ключевые принципы программирования игр?
Есть несколько ключевых тем, которые просто обязаны появиться в блоге, посвященном программированию игр. Вот некоторые из самых важных вещей, которые мы принимаем во внимание.
Система контроля версий/Система управления версиями
Так же, как у вас есть точки сохранения в играх, есть точки сохранения в разработке проектов. Они действуют как общее хранилище для проекта и означают, что три или четыре программиста могут работать над системой одновременно, создавать изменения и отправлять их на сервер. Это позволяет нам отслеживать эти изменения и легко откатываться, если что-то сломается. Если два разработчика работают над одним и тем же файлом, этот файл станет частью объединения, если возникают конфликты, мы можем вручную разрешить их или выбрать изменения одного из разработчиков, которые будут применены. Это часто будет происходить при использовании Префабов или Сцен в Unity.
Эти термины иногда пересекаются, но в общем, система контроля версий фокусируется на коде, а система управления версиями включает все файлы проекта, ресурсы и документацию.
Когда вы только начинаете использовать систему контроля версий, это может показаться немного пугающим, может казаться очень ошеломляющим, и когда дело доходит до конфликтов, вы можете оказаться в тупике, не зная, что делать. Но характер управления версиями помогает вам сохранять моменты во времени, поэтому, если вы часто обновляете и используете подробные сообщения о коммитах, это очень полезно и безопасно. Вы можете вернуться к нескольким точкам, иметь несколько веток и т. д. Подумайте об этом как о сетке безопасности разработчика, чтобы избежать повторения версии Toy Story 2 от Pixar - случайно удаленной, а затем восстановленной с жесткого диска дома у их технического директора, вместо этого все безопасно сохранено на сервере.
Объектно-ориентированное программирование (ООП)
Это тип программирования, который мы в основном используем в Kwalee. Он использует объекты для представления реальных вещей или абстрактных концепций и нацелен на организацию базы кода с использованием принципов, которые отражают, как мы видим и взаимодействуем с объектами в реальном мире. Это помогает поддерживать сложные системы, организуя код в отдельные классы, которые можно повторно использовать, масштабировать и поддерживать более легко.
Конечно, существует дебаты о том, хорошее это или нет. Хотя он не является самым производительным, он хорошо работает. Как и в случае с языками, у каждого есть свои плюсы и минусы, и вы должны сначала выучить один и понять, как работают языки и компиляторы (переводчики человеческого кода в машинный код). Вы также можете рассмотреть другие типы, такие как функциональное программирование, которое рассматривает это больше как математику, логическое программирование, которое использует факты и правила, или процедурное программирование, которое использует пошаговые данные.
Паттерны программирования
Это замечательные полезные вещи - решения, которые могут помочь с общими проблемами, с которыми вы столкнетесь в вашем дизайне программного обеспечения. Они дают вам шаблон для исправления проблемы, так что вам не нужно каждый раз изобретать велосипед заново и следовать проверенным решениям.
Например, паттерн Singleton помогает обеспечить лишь одно существование класса, такого как менеджер настроек игры, в вашей игре и предоставляет вам глобальную точку доступа к нему. Код для этого шаблона означает, что существует только один экземпляр класса SettingsManager, так что не нужно создавать или дублировать его каждый раз, когда он необходим.
Существует также Паттерн Фабрики, который может помочь вам организованно и гибко создавать объекты. Вы можете определить методы для генерации определенных типов объектов, таких как персонажи или предметы, на основе входных параметров, позволяя вам легко создавать больше объектов подобного типа, не начиная с нуля каждый раз.
Я надеюсь, что этот блог дал вам вкус к программированию игр, будь вы новичок в этой области или опытный программист! Если вы трудолюбивый, но веселый человек, вы бы нам подошли, так что узнайте больше о карьере в Kwalee. В противном случае, вы можете узнать о наших мобильных играх или издательстве и узнать больше о том, что мы выпускаем как разработчик и издатель.








