Ігровий програміст – це людина, яка втілює бачення дизайнера і робить його працездатним у ігровому рушії, який ми використовуємо. Я працюю в команді з програмування мобільних ігор в Kwalee, тому для нас це в основному Unity. Наприклад, якщо дизайнер хоче, щоб кубик котився певним чином, я напишу скрипт для керування логікою. Ми також співпрацюємо з художниками, щоб наші ігри не лише виглядали приголомшливо, але й мали високу продуктивність на пристроях.
У цьому блозі я поділюсь своїми п'яти роками роботи в Kwalee, щоб надати важливі роздуми та поради про те, як бути ігровим програмістом. Я проведу вас через деякі мови, інструменти та принципи, які ми використовуємо, дам свої кар’єрні поради, а також поради для початківців та уже досвідчених.
Що робить ігровий програміст?
Ми пишемо код і допомагаємо грі стати реальністю. Хоча дизайнери створюють концепти, а художники створюють елементи, програміст створить функціональний, іграбельний досвід. Ми створюємо та оптимізуємо продуктивність гри та усуваємо будь-які проблеми, які виявляються.
Ми забезпечуємо, щоб гра відчувалася чудово і працювала з високою продуктивністю. Для цього ми повинні переконатися, що сам код чистий та розширюваний, що складніше, ніж ви думаєте. Ми використовуємо стандарти кодування для підтримки постійної якості в усіх наших командах - документ, який може включати стандарти іменування, форматування тощо. Однак іноді речі не завжди такі прості, і час від часу вам може знадобитися мислити нестандартно, щоб виконати все вчасно.
Наші обов'язки також охоплюють те, щоб гра добре запускалася на обладнанні кінцевих користувачів. Наприклад, в наших мобільних іграх ми повинні уникати, щоб старі пристрої нагрівалися, тому ми працюємо з художниками для оптимізації кількості викликів малювання. Виклик малювання - це команда, надіслана від процесора (CPU) до графічного процесора (GPU) для відображення об’єкта на екрані - він повідомляє GPU намалювати графічні елементи, такі як текстури, моделі або шейдери. Ми повинні мінімізувати кількість цих викликів у нашій грі, оскільки надто багато їх може спричинити такі проблеми, як падіння частоти кадрів або затримки. Існує безліч способів вирішення цього, але такі підходи, як об'єднання кількох об'єктів в один виклик малювання або зменшення кількості унікальних текстур і матеріалів можуть допомогти. Це особливо важливо для мобільних пристроїв, оскільки на ринку так багато різних пристроїв з різними технічними характеристиками.
Які основні мови програмування ігор?
Більшість нашого часу як щоденні програмісти ігор витрачається на скриптування однією з безлічі мов програмування - врешті-решт, ми розробники програмного забезпечення іншого типу. Є багато мов на вибір. Деякі здаються легшими за інші, але коли ви навчитеся і опануєте одну, ви точно зможете вивчити інші - основна задача - потрапити у двері.
Ось ознайомлення з деякими з найпопулярніших мов програмування ігор:
- C# - універсальна і популярна мова програмування, що широко використовується в розробці ігор. Вона одна з найлегших для новачків. Одна з її найкращих функцій - автоматичне управління пам’яттю, що дуже корисно для зайнятих програмістів, як ми.
- C++ - на відміну від цього, це неконтрольована мова, тому вам доведеться вручну розподіляти та вивільняти пам’ять, що робить її більш складною та важкою. Однак це дозволяє досягти більшої швидкості, контролю та продуктивності.
- Java - як і C#, Java має своє власне управління пам’яттю та автоматичне управління сміттям, що полегшує розробникам обробку пам’яті без надмірного зважування деталей. Вона широко використовується в веб-розробці та корпоративних застосунках, і, хоча вона може (можливо) не бути найкращим вибором для розробки ігор, залишається надійним варіантом для створення масштабованих та ефективних застосунків.
- Swift - це рідна мова Apple для створення застосунків та ігор для iOS та macOS. Однак це означає, що вона менш корисна для кроссплатформної розробки, оскільки ми прагнемо завжди публікувати наші мобільні ігри як для Android, так і для iOS.
Як стати ігровим програмістом?
Існує багато різних шляхів, як стати ігровим програмістом. Мій шлях досить звичайний - я навчався на спеціальності "Дизайн та програмування ігор" в Університеті Стаффордширу. Спочатку я думав піти в область ігрового мистецтва - я завжди був захоплений мистецтвом у дитинстві, плюс мені дуже подобалися художні модулі в університеті, але поки був там, я виявив, що мене дуже цікавить створення геймплею. На створення однієї високополігональної моделі у мене могло б піти кілька днів, але я міг змусити качку літати і вибухати вдвічі швидше. Прототипування дозволяє швидко побачити результат прямо перед собою.
Однак краса програмування ігор в тому, що це доступно більшості людей навіть якщо ви не йдете традиційним шляхом. У мене були друзі в університеті у віці 50+ - ніколи не пізно спробувати щось нове. В Kwalee ми навіть найняли когось, хто вчився в основному через YouTube-відео і створив гру заради задоволення. Сьогодні є багато можливостей для свіжих та амбітних талантів. Дивлячись на портфоліо нових студентів, вони мають стільки більше у своїх активів. Ми бачимо фантастичні таланти, і це захопливий час у галузі.
Питання, яке, мабуть, хочете запитати - чи вплине штучний інтелект на програмування як кар'єру? Він може бути Часи дуже корисним та стає кращим. Ідеально, якщо вам потрібно щось пояснити або ви застрягли на проблемі. Ви можете використовувати його для налагодження помилок або рефакторингу ("очищення") свого коду, вставляючи його в останній ChatGPT. Однак, коли ми дивимося на портфоліо, ми хочемо бачити вашу роботу, якою ви пишаєтеся, AI добре використовувати, але намагайтеся не заміняти ним свої вміння.
Що є типовим днем у житті ігрового програміста?
Дозвольте навести приклад на основі мого життя. Я провідний програміст (я називаю це своєю роботою мрії), тому це чудове поєднання практичної роботи з управлінням іншими програмістами!
Типовий день у моєму світі починається з того, щоб прийти на роботу, взяти латте, потім двічі перевірити будь-які помилки або перешкоди для команди QA. Перевірити з командою, чи не потребує хтось, щоб я щось зробив для розблокування їх роботи. Потім увімкнути музику та відкрити список завдань. Ми ділимося відео про прогрес через Slack, щоб отримати швидкий зворотний зв'язок, одночасно перекидаючи між 2-3 проектами для підтримки членів моєї команди. Ми також витрачаємо багато часу на інвестування у спільні системи, щоб зробити наше програмування ефективнішим, - все це потрібно регулярно підтримувати, оновлювати і виправляти, щоб все працювало безперебійно.
Поради для початківців у ігровому програмуванні
Якщо ви починаєте і бажаєте стати повноцінним програмістом, ось мої поради для початківців!
- Є стільки всього, що можна вивчити онлайн, на YouTube, і є стільки прикладів ігор, що у вас немає виправдання не вчитися! Популярні рушії безкоштовні і їх дуже весело використовувати!
- На повністю протилежному кінці спектру, можливо, 30 років, але ви повинні спробувати прочитати впливову книгу "Design Patterns: Elements of Reusable Object-Oriented Software" авторства так званих авторів "Gang of Four", яка представила деякі основи ігрових патернів, які ми використовуємо щодня в програмуванні.
- У вас можуть бути власні ідеї, але обов'язково починайте зображати основи, щоб добре оволодіти ними.
- Коли вам не потрібно займатися комерційним проектом, ви можете писати стільки коду, скільки захочете, тому мати багато задоволення, створюючи божевільні речі.
- Створення портфоліо дійсно важливо (і це як я отримав свою роботу). Але будьте дуже уважні, щоб не просто завантажувати ті ж старі університетські проекти, тому що ми бачитимемо багато заявок з такими. Навіть проведення додаткового дня на рескінінг та додавання більше функцій допоможе вам виділитися.
- Створення власної гри у реальному світі також є розумною ідеєю - це дуже дешево, щоб випустити гру на Google Play, тому випустіть щось, що ви можете показати рекрутерам/видавцям/родині/домашнім улюбленцям на телефоні. Ви можете навіть заробити кілька тисяч доларів на рік, поки не отримаєте повний робочий контракт, і це бонус! Або це може спокусити вас створити власну повноцінну гру та об'єднатися з видавцем.
- Не тільки вчіться програмувати - вчіться мистецтву, дизайну, тестуванню якості (QA) та іншим дисциплінам, з якими ви взаємодіятимете. Наприклад, варто зрозуміти методи QA, тому що ви можете потрапити в пастку, вважаючи, що щось працює, але потрібно грати в це як користувач, а не як той, хто написав код і має визначений погляд на те, як ви очікуєте, щоб це "мало гратися". Будьте руйнівником, пробуйте випадкові речі, які можуть робити люди, натискаючи випадкові кнопки та інші дивні поведінки.
Поради для досвідчених програмістів
Ось деякі з порад, які допомогли мені перейти від початківця до провідного.
- Ви завжди можете отримати користь від додаткового навчання, і пам'ятайте, що без помилок ми не можемо навчитися!
- Якщо вас дійсно цікавить щось - ви можете стати більш спеціалізованим. Наприклад, якщо вам подобається працювати з шейдерами і рендерінгом, дізнайтеся більше про те, як використовувати графічні шейдери для розширення своїх можливостей відтворення складних візуальних ефектів і рендерингових шляхів для оптимізації продуктивності або створення чудових ефектів.
- Ви могли б зробити щось дійсно круте, як складну систему, завантажити її в магазин активів, щоб показати його, якщо ваш контракт дозволяє, і продемонструвати свою передову роботу. Ви могли б розвинути нішу як певний тип програміста, наприклад, програміст геймплею, серверний програміст, графічний програміст або програміст для мережевих ігор.
- Альтернативно, ви можете піти шляхом управління, як я, і наставництва. Моя тактика для розвитку кар'єри була в тому, щоб брати на себе нові відповідальності. Спочатку я почав з поліпшення малих речей, наприклад, маленьких змін у процесі ... Потім оптимізував процеси, використовуючи шаблони, щоб заощаджувати час при створенні нових проектів. Потім я відчув смак до наставництва та управління, що допомогло мені отримати більше впевненості, і зараз я беру участь у переглядах коду, проведенні семінарів та лідерству проектів.
Незалежно від того, чи працюєте ви в команді або як менеджер, важливо давати похвалу так само, як і конструктивну критику. Працюючи з кодом, добре підзаряджувати людей!
Які ключові принципи програмування ігор?
Є кілька ключових тем, які обов'язково мають бути в блозі про програмування ігор. Це деякі з найважливіших речей, які ми розглядаємо.
Контроль версій/Контроль джерел
Так само, як ви маєте точки збереження в іграх, у проектному розвитку є точки збереження. Вони служать як загальне сховище для проекту і означають, що три або чотири програмісти можуть одночасно працювати над системою, створювати зміни і відправляти їх у сервер. Це дозволяє нам відслідковувати ці зміни і легко відкатуватися, якщо щось зламається. Якщо два розробники працюють над тим же файлом, той файл стане частиною злиття, якщо є конфлікти, ми потім можемо вручну вирішити їх або вибрати зміни однієї людини для застосування. Це відбуватиметься часто при роботі із префабами або сценами в Unity.
Ці терміни іноді перетинаються, але загалом, контроль джерел зосереджує увагу на коді, а контроль версій включає всі файли проекту, активи та документацію.
Коли ви лише починаєте використовувати контроль джерел, це може здаватися трохи страшним на початку, це може здатися дуже непосильним, і коли йдеться про конфлікти, ви можете не знати, що робити. Але природа контролю версій допомагає зберігати моменти в часі, тому якщо ви часто оновлюєте та використовуєте детальні повідомлення про коміт, це неймовірно корисно і безпечно. Ви можете повернутися до кількох точок, мати кілька гілок тощо. Подумайте про це як про страхову сітку розробника, щоб ми могли уникнути сценарію як з Toy Story 2 від Pixar - випадково видалили і потім відновили з жорсткого диска у домі їх технічного директора, натомість все це є надійно на сервері.
Об'єктно-орієнтоване програмування
Цей вид програмування ми переважно використовуємо в Kwalee. Він використовує об'єкти для представлення реальних речей чи абстрактних понять та має на меті організувати кодову базу, використовуючи принципи, що відображають, як ми бачимо та взаємодіємо з об'єктами в реальному світі. Це допомагає підтримувати складні системи, організовуючи код у чіткі класи, які ви можете легко використовувати повторно, масштабувати та підтримувати.
Звісно, існує дебати щодо того, чи це добре. Хоч це не найвищий за продуктивністю варіант, він працює непогано. Як і з мовами, кожна має свої плюси і мінуси, і ви повинні вивчити одну, щоб почати і зрозуміти, як працюють мови і компілятори (перекладачі коду людини у машинний код). Ви також можете розглядати інші типи, такі як функціональне програмування, яке більше нагадує математику, логічне програмування, яке використовує правила, або процедурне програмування, яке використовує поетапну обробку даних.
Шаблони програмування
Це дуже корисні речі - повторно використовувані рішення, які можуть допомогти з загальними проблемами, які ви зустрінете у своєму проектуванні програмного забезпечення. Вони дають вам шаблон для вирішення проблеми, щоб ви не мали переосмислювати велосипед кожен раз і могли дотримуватися перевірених рішень.
Наприклад, шаблон Singleton допомагає гарантувати, що у вашій грі існує лише один екземпляр класу, наприклад, менеджера налаштувань гри, і надає глобальну точку доступу до нього. Код для цього шаблону означає, що існує лише один екземпляр класу SettingsManager, тому вам не потрібно створювати або дублювати його кожного разу, коли він вам потрібен.
Також існує Фабричний Шаблон, який може допомогти вам створювати об'єкти більш організовано та гнучко. Ви можете визначити методи для створення певних типів об'єктів, таких як персонажі або предмети, на основі вхідних параметрів, що дозволить вам легко створювати більше об'єктів подібного типу без початку з нуля кожного разу.
Сподіваюся, що цей блог дав вам уявлення про програмування ігор, чи ви новак в цій області, чи досвідчений програміст! Якщо ви працьовита, але весела людина, вам точно підійде наша команда, дізнайтеся більше про кар'єру в Kwalee. А ще можна дізнатися про наші мобільні ігри або видавництво і більше дізнатися про те, що ми випускаємо як розробник та видавець.








