Посібник з програмування ігор - Поради, інструменти та кар'єра

автор Connor Taylor

Програміст гри - це той, хто втілює в життя бачення дизайнера, щоб воно працювало в ігровому рушії, який ми використовуємо. Я працюю в команді програмування мобільних ігор у Kwalee, тому для нас це в основному Unity. Наприклад, якщо дизайнер хоче, щоб кубик кидався певним чином, я пишу скрипт для керування логікою. Ми також співпрацюємо з художниками ігор, щоб переконатися, що наші ігри не лише виглядають чудово, а й працюють з високою продуктивністю на пристроях.

У цьому блозі я поділюся своїми п'ятьма роками роботи в Kwalee і розкажу про важливі аспекти та поради щодо програмування ігор. Я розповім про деякі мови, інструменти та принципи, які ми використовуємо, дам поради щодо кар'єри, а також поради для початківців та досвідчених.

Що робить програміст ігор?

Ми пишемо код і допомагаємо грі стати реальністю. Поки дизайнери ігор створюють концепції, а художники ігор - активи, програміст створює функціональний, ігровий досвід. Ми створюємо та оптимізуємо продуктивність гри й виправляємо виявлені проблеми.

Ми гарантуємо, що гра буде чудово відчуватися і працювати з високою продуктивністю. Для цього ми повинні впевнитися, що код сам по собі є чистим і розширюваним, що складніше, ніж здається. Ми використовуємо стандарти програмування для підтримання послідовної якості у всіх наших командах - документ, який може містити стандарти найменування, форматування тощо. Проте іноді все не так просто, і від часу до часу потрібно думати нестандартно, щоб виконати роботу вчасно.

Наші обов’язки також включають забезпечення гарного функціонування гри на обладнанні кінцевих користувачів. Наприклад, у наших мобільних іграх ми повинні уникати перегріву старіших пристроїв, тому працюємо з художниками, оптимізуючи кількість викликів малювання. Визов малювання - це команда, яку Central Processing Unit (CPU) відправляє на Graphics Processing Unit (GPU), щоб відобразити об'єкт на екрані - це говорить GPU намалювати графічні елементи, такі як текстури, мережі або шейдери. Нам потрібно мінімізувати кількість цих визовів у нашій грі, оскільки їх надлишок може викликати проблеми, такі як падіння частоти кадрів або зависання. Існує багато способів розв'язання цієї проблеми, але такі речі, як об'єднання кількох об'єктів в один визов малювання або зменшення кількості унікальних текстур та матеріалів, можуть допомогти. Це особливо важливо для мобільних пристроїв, оскільки існує так багато різних приладів на ринку з різними технічними характеристиками.

Які основні мови програмування ігор?

Більшу частину нашого часу як щоденні програмісти ігор ми проводимо скриптуючи на одній з багатьох мов програмування - ми програмісти іншого типу. Є багато мов на вибір. Деякі здаються простішими, ніж інші, але коли ви вивчите одну, зможете легко освоїти інші - головне - це зробити перший крок.

Ось введення до деяких з найпопулярніших мов програмування ігор:

  • C#- універсальна і популярна мова програмування, широко використовувана в розробці ігор. Це одна з найлегших для освоєння, якщо ви початківець. Одна з її найкращих характеристик - автоматичне збирання сміття - що вона керує розподілом пам'яті за вас - дуже корисно для зайнятих програмістів, як ми.
  • C++- на противагу, це некерована мова, тому ви повинні вручну розподіляти і деалокувати пам'ять, що робить її складнішою і важчою для освоєння. Проте вона дозволяє досягти більшої швидкості, контролю і продуктивності.
  • Java - як і C#, Java має свою власну систему управління пам'яттю та збирання сміття, що полегшує розробникам керувати пам'яттю без занурення у деталі. Вона широко використовується у веб-розробці та корпоративних застосуваннях, і хоча вона не є (можливо) першою рекомендацією для розробки ігор, залишається надійним варіантом для створення маштабованих та ефективних програм.
  • Swift - це рідна мова Apple для створення додатків та ігор для iOS та macOS. Проте це означає, що вона є менш корисною для кроссплатформного розвитку - оскільки ми намагаємося завжди публікувати наші мобільні ігри як на Android, так і на iOS.

Як стати програмістом ігор?

Є багато різних способів стати програмістом ігор. Мій шлях доволі традиційний - я вивчав Дизайн та Програмування Ігор в Університеті Стаффордшира. Спочатку я думав, що стану художником ігор - я завжди дуже захоплювався мистецтвом у дитинстві, плюс мені дійсно подобалися мистецькі модулі в університеті, але під час навчання я виявив, що мені дуже подобається створювати ігровий процес. Мені могло потрібно кілька днів для створення однієї моделі з високою полігональністю, але я міг змусити качку летіти і вибухати за половину часу. Прототипування дозволяє мені швидко бачити результат прямо переді мною.

Проте, краса програмування ігор полягає в тому, що це доступне для більшості людей, навіть якщо ви не пройшли традиційний шлях. У мене були друзі в університеті віком 50+ - ніколи не пізно спробувати щось нове. У Kwalee ми навіть взяли на роботу людину, яка навчилася в основному через відео на YouTube і створила гру заради розваги. Сьогодні існує так багато можливостей для нових та ентузіастів талантів. Дивлячись на портфоліо нових студентів, вони мають під рукою набагато більше. Ми бачимо чудових талантів, що приходять, і це захопливий час в індустрії.

Питання, яке вас, напевно, цікавить - чи вплине AI на програмування як кар'єру? Вона може бути надзвичайно корисною, і постійно покращується. Ідеально, якщо вам потрібно пояснити щось або ви застрягли в проблемі. Ви можете використовувати її для відладки помилок або переформатування ('очистити') вашого коду, вставивши його в найновіший ChatGPT. Проте, коли ми дивимося на портфоліо, ми хочемо бачити вашу роботу, з якою ви пишаєтеся, AI можна використовувати, але намагайтеся не використовувати її як заміну ваших власних навичок.

Як виглядає типовий день у житті програміста ігор?

Дозвольте навести приклад на основі мого життя. Я Головний Програміст (я називаю це своєю мрією) тому це чудове поєднання практичності та управління іншими програмістами!

Типовий день у моєму світі - це прийти, випити латте, потім двічі перевірити будь-які помилки або блокери для команди QA. Перевірити з командою, чи нікому нічого не потрібно від мене, щоб розблокувати їхню роботу. Потім грає музика й з'являється список завдань. Ми ділимось відео прогресу через slack, щоб отримати швидкі відгуки, одночасно переходячи між 2-3 проектами, щоб підтримати членів моєї команди. Ми також багато часу вкладаємо в розробку спільних систем для підвищення ефективності нашого программування - все це потрібно регулярно підтримувати, оновлювати та виправляти, щоб все працювало безперебійно.

Початківські поради з програмування ігор

Якщо ви лише починаєте і прагнете стати повноцінним програмістом, ось мої поради для початківців!

  • Є так багато, що можна навчитися онлайн, на YouTube, і існує так багато прикладів ігор, що у вас немає виправдання, щоб не навчитися! Популярні рушії безкоштовні і з ними дуже весело працювати!
  • На зовсім іншому кінці спектра, можливо, йому 30 років, але ви повинні спробувати прочитати впливову книгу "Design Patterns: Elements of Reusable Object-Oriented Software" від авторів, відомих як Банда Чотирьох, яка ввела деякі основи шаблонів ігор, які ми використовуємо щодня у програмуванні.
  • У вас можуть бути свої власні ідеї, але переконайтеся, що ви починаєте з простих, щоб зрозуміти основи.
  • Коли ви не прив'язані до комерційного проекту, ви можете писати стільки коду, скільки вам захочеться, тому отримуйте задоволення, створюючи божевільні речі.
  • Побудова портфоліо справді важливо (і це стало причиною, як я отримав свою роботу). Але будьте дуже уважними, щоб не просто завантажити ту ж саму університетську роботу, оскільки ми побачимо багато заявок з такими. Навіть проведення додаткового дня для перепроектування та додавання більше функцій допоможе вам виділитися.
  • Створення власної реальної гри також розумна ідея - дуже дешево завести гру на Google Play, тому випустіть щось, що ви можете показати рекрутерам/видавцям/родині/котам на вашому телефоні. Ви можете навіть заробити кілька тисяч доларів на рік, поки не встановитеся на ексклюзивний штатний контракт, це бонус! Або це може спокусити вас створити власну повноцінну гру і співпрацювати з видавцем.
  • Не просто вчиться програмуванню - вчиться мистецтву, дизайну, QA та інших дисциплін, з якими ви будете взаємодіяти. Наприклад, варто розуміти методи QA, бо ви можете потрапити в пастку, думаючи, що щось працює, але треба його грати як користувачу, не як тому, хто написав код і має чітке бачення, як ви очікуєте, що воно "повинно бути зіграно". Будьте деструктивні, спробуйте випадкові речі, які люди можуть робити, натискання випадкових кнопок та іншу дивну поведінку.

Поради для досвідчених програмістів

Ось деякі поради, які допомогли мені перейти від молодшого до програміста, до старшого до керівника.

  • Ви завжди можете отримати користь від додаткового навчання, і пам'ятайте, що без помилок ми не можемо навчитися!
  • Якщо ви винайдені чимось - ви могли б стати більш спеціалізованими. Наприклад, якщо вам подобається працювати з шейдерами та конвеєрами рендеринга, дізнайтеся більше про те, як використовувати шейдери, щоб розширити свої можливості візуалізації складних ефектів і використовувати рендерингові конвеєри для оптимізації продуктивності або створення чудових ефектів.
  • Ви могли б створити щось дійсно круте, як складну систему, завантажити її в магазин активів, якщо ваш контракт це дозволяє, і похизуватися своєю просунутою роботою. Ви могли б розвивати нішу як певний тип програміста, наприклад, програміст гри, серверний програміст, графічний програміст або програміст багатокористувацької гри.
  • Також можна піти по шляху менеджменту, як я, і наставляти людей. Моя тактика просування кар’єри полягала в освоєнні нових обов’язків. Спочатку я почав з покращення дрібниць, тобто невеликих змін у робочому процесі. Потім я полегшив створення процесів завдяки використанню шаблонів, щоб заощадити час під час створення нових проектів. Потім я спробував наставництво та управління, що допомогло мені здобути більше впевненості, і тепер я беру участь у взаємних оглядах, оглядах коду, проводженні семінарів та керівництві командам у проектах.

Незалежно від того, чи ви працюєте в команді, чи як керівник, так само важливо надати похвалу, як і конструктивну критику. При перевірці коду, підбадьорюйте людей!

Які ключові принципи програмування ігор?

Є певні теми, які просто повинні бути включені у блог, що охоплює програмування ігор. Це деякі з найважливіших речей, які ми розглядаємо.

Контроль версій/управління джерелом

Так само, як і у вас зберігаються збереження в іграх, є точки збереження в розробці проекту. Вони діють як складське зберігання для проекту й означають, що три або чотири програмісти можуть працювати над системою одночасно, створювати зміну і натискати її на сервер. Це дозволяє нам відслідковувати ці зміни й легко відкатуватися, якщо щось йде не так. Якщо два розробники працюють над однією вправою, цей файл стане частиною об'єднання, якщо є конфлікти, ми можемо їх вирішити вручну або обрати зміни, що вніс індивідуум. Це часто відбуватиметься, коли використовуєте Префаби або Сцени в Unity.

Ці терміни іноді перетинаються, але загалом управління джерелами зосереджується на коді, а контроль версій включає всі проектні файли, активи й документацію.

Коли ви вперше починаєте використовувати управління джерелами, це може трохи лякати спочатку, це може виглядати занадто великим і, коли трапляються конфлікти, ви можете вагатися, що робити. Однак природа управління версіями допомагає вам зберігати моменти в часі, тому якщо ви часто оновлюєте й використовуєте детальні повідомлення про коміти, це надзвичайно корисно й безпечно. Ви можете повернутися до кількох точок, мати кілька гілок тощо. Подумайте про це як про безпечну сітку розробників, тому ми можемо уникнути версії Історії Іграшок 2 Pixar - випадково видаленої й потім відновленої з жорсткого диска в будинку їхнього Технічного Директора, замість цього все надійно збережено на сервері.

Об'єктно-орієнтоване програмування

Це той тип програмування, який ми в основному використовуємо у Kwalee. Він використовує об'єкти для представлення реальних речей або абстрактних концепцій і організовує кодову базу за допомогою принципів, які відображають те, як ми бачимо і взаємодіємо з об'єктами в реальному світі. Це допомагає підтримувати складні системи, організовуючи код у чіткі класи, які ви можете використовувати повторно, маштабувати та підтримувати легше.

Звичайно, є дискусії, чи це добре, чи ні. Хоча це не найвищий з можливих показників, воно добре працює. Так само, як кожна мова має свої плюси й мінуси, і ви повинні вивчити одну, щоб почати і зрозуміти, як працюють мови та компілятори (перекладачі людського коду у машинний код). Ви також можете розглядати інші типи, такі як функціональне програмування, яке ставиться до цього більше як до математики, логічне програмування, яке використовує факти та правила, або процедурне програмування, яке використовує покрокові дані.

Шаблони програмування

Це неймовірно корисні речі - багаторазові рішення, які можуть допомогти з загальними проблемами, з якими ви зіткнетеся у створенні програмного забезпечення. Вони надають вам шаблон для вирішення проблеми, щоб ви не мусили винаходити велосипед кожного разу й могли слідувати перевіреним рішенням.

Наприклад, шаблон одиничності допомагає вам упевнитися, що є лише один екземпляр класу, такого як менеджер налаштувань гри, у вашій грі, й надає вам глобальний доступ до нього. Код для цього шаблону означає, що існує лише один екземпляр класу SettingsManager, тож ви не мусите створювати чи дублювати його кожного разу, коли вам це потрібно.

Є ще й фабричний шаблон, який може допомогти вам створити об'єкти більш організованим та гнучким чином. Ви можете визначити методи для генерування конкретних типів об'єктів, таких як персонажі чи предмети, на основі вхідних параметрів, що дозволяє вам легко створювати більше об'єктів подібного типу, не починаючи з нуля кожного разу.

Сподіваюся, цей блог дав вам уявлення про програмування ігор, чи ви новачок у цій галузі, чи досвідчений програміст! Якщо ви працездатна, але весела людина, ви підходите нашій команді, тож дізнайтеся більше про кар'єри в Kwalee. Або дізнайтеся про наші мобільні ігри або видавництво й дізнайтеся більше про те, що ми випускаємо як розробники та видавці.

Про автора:

Connor Taylor, провідний програміст-ігровий у Kwalee, процвітає у створенні ігор та сприянні підтримуючій, веселій команді. З досвідом більше 5 років, він створив хіти, такі як Jetpack Jump, і наставляє інших у розробці на Unity.

Поділитися цією статтею: