Як стати Junior Unity Developer: з чого починати кар’єру та як уникати помилок

Привіт! Мене звати Євгеній Яременко, я — Unity Team Lead у компанії Universe з екосистеми Genesis. Наш ігровий підрозділ займається розробкою мобільних казуальних ігор. Шлях до геймдеву — це низка рішень, які ми ухвалюємо: яку мову вивчати? Яке середовище обрати? Шукати курси чи стажування? Робити перший проєкт соло чи в команді? Фриланс чи робота в довгостроковому проєкті?

У цьому матеріалі розглянемо три помилки, яких припускаються новачки геймдеву. Чому я напевно знаю про них? Бо сам їх припускався та помічав у колег. Я розкажу про особливості роботи в Unity, можливості професійного розвитку, користь фрилансу та стек технологій, який потрібен для роботи в Unity. Якщо ви бачите свій розвиток у геймдеві та не знаєте, з чого почати, — тут ви знайдете відповіді на свої запитання.

Вибір ігрового фреймворку. Чому Unity?

Існує низка середовищ для розробки ігор. При виборі варто врахувати:

  • цільову платформу, для якої хочете розробляти гру (мобільні девайси, консолі, PC, Web тощо);
  • рівень технічних навичок для користування середовищем;
  • специфічні задачі, які необхідно реалізувати у грі.

Наприклад, якщо розробник знає JavaScript і хоче розробляти ігри для Web, то йому підійде Babylon.js чи PixiJS. Якщо проєкт потребує фотореалістичної графіки або детальної симуляції фізичних явищ — варто обрати Unreal Engine. Він має широкі можливості з оптимізації та створення крутих візуальних ефектів. Але цей ігровий фреймворк має високий поріг входу: хоч мова C++ і не обовʼязкова для використання в деяких проєктах, в Unreal закладені складніші в освоєнні принципи створення ігор, ніж в інших ігрових середовищах.

Якщо людина не має навичок програмування, але хоче створювати прості мобільні ігри, можна звернути увагу на GameMaker. У ньому є візуальний скриптинг — простий інструмент для створення ігрової логіки шляхом організації функціональних блоків та зв’язків між ними. Такий інструмент використовується і в Unreal Engine — Blueprint, але через ігрове середовище він складніший в освоєнні.

На мою думку, Unity — універсальний ігровий фреймворк, у якому можна створювати ігри для мобільних девайсів, PC, Web. Буде доречним і для перших простих 2- ігор, і для складних 3D-проєктів. Поріг входження — нижчий, ніж в Unreal Engine, і процес створення мобільних ігор — простіший. Мова програмування — С#. Середовище має інструменти для оптимізації та реалізації ігор різних жанрів.

Навколо Unity сформувалося велике ком’юніті, у якому можна знайти численні туторіали, ґайди, форуми та курси. Якщо чогось не знаєш або виник баг, який не можеш пофіксити, з великою ймовірністю можна знайти відповідь, просто «погугливши». До того ж на форумах часто відповідають самі розробники Unity.

Я вважаю головними перевагами цього середовища:

  • досить низький поріг входження;
  • численний інструментарій для різних ігрових задач;
  • велике ком’юніті, безліч навчальних матеріалів та якісна документація коду від розробників середовища.

Спеціалізації в Unity: шляхи професійного розвитку

Ігрова розробка — це велика кількість професій, у яких можна розвиватися горизонтально. Зокрема, позиція Game Developer є широким поняттям. Unity Developer, як ігровий розробник — це сукупність спеціалізацій, які реалізують різні складові гри.

Наприклад, якби ми створювали GTA на Unity, нам потрібні були б такі напрями розробки:

Logic Programmer. Гра — це сукупність різних механік та взаємозвʼязки між ними: управління персонажем, автомобілем, механіка пострілів, модуль проходження місії та навіть модуль скидання ваги в спортзалі. Розробник ігрових механік здебільшого займається програмуванням ігрової логіки.

AI Developer. Безліч «випадкових» дій та явищ у грі, а також поведінка неігрових персонажів (NPC), яких ми зустрічаємо на вулиці чи взаємодіємо, — це результат роботи так званих систем штучного інтелекту. Такі системи бувають різного рівня складності, і їхньою реалізацією здебільшого займається окремий програміст.

Shader Developer. Усі візуальні елементи та ефекти в грі, які ми бачимо, існують завдяки спеціальним програмам — шейдерам. Частина з них уже вбудована в Unity, але повсякчас виникає потреба створити щось з унікальними візуальними властивостями. В Unity шейдери створюються шляхом програмування на мові HLSL або візуальним скриптингом — ShaderGraph.

VFX Developer. Для збагачення візуальної складової, у грі неодмінно використовуються різні візуальні ефекти, які супроводжують дії гравця або явища навколо: постріли, вибухи, піщана буря тощо. Над такими анімаціями та системами VFX працює розробник візуальних ефектів.

Technical Artist. Щоби візуальні ефекти були точно відображені на всіх цільових платформах гри, проте вимагали мінімум апаратних обчислень, існує позиція Technical Artist. Він, власне, виконує аналіз та оптимізацію всього візуалу, що бачить гравець.

Це далеко не всі спеціальності одного поняття Unity-розробника. Потреба в них залежить від конкретних вимог гри. Чим більша команда і проєкт, тим більше вузькоспеціалізованих розробників працюють над ним. Тож можливостей для розвитку девелопера — безліч.

Шлях до геймдеву: помилки

Ще зі школи мене цікавило програмування ігор. Якось я натрапив на Unity, почав самостійно вивчати його можливості та згодом створювати перші примітивні ігрові механіки. Однак доволі довго геймдев був хобі та не здавався мені перспективним карʼєрним і фінансовим напрямом. Я вчився на факультеті інформатики та обчислюваної техніки у КПІ імені Ігоря Сікорського, паралельно пробував себе у Web, але захоплення геймдевом та Unity не відпускало. Тому я накидав перше резюме, створив декілька простих гіперказуальних мобільних ігор і пішов на сайти з пошуку роботи підкорювати геймдев. Без комерційного досвіду більшість рекрутерів мене «скіпали».

Але мені пощастило потрапити на співбесіду в компанію, яка вела проєкти на фрилансі та шукала людину для простих завдань. У мене з’явився ментор, який протягом перших місяців перенавчав мене тим речам, які я завчив неправильно, починаючи з азів геймдеву.

Отже, три найголовніші помилки джуніора, які я для себе засвоїв:

Помилка № 1. Самостійне навчання без зворотного зв’язку

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

Як було в мене: без зворотного зв’язку я неправильно засвоїв деякі процеси та базові принципи програмування. Банально не знав про існування обовʼязкових для розробки систем, які сильно спрощують роботу. Наприклад, у своїх перших проєктах я не використовував систему контролю версій, а лиш періодично робив бекап файлів вручну. Це займало дуже багато часу й було цілком неправильним.

Рішення: організувати своє навчання так, щоби постійно отримувати фідбек від спеціалістів високого рівня. Це можуть бути курси, позиція трейні в команді із ментором або репетитор із програмування. Ключовий момент — регулярне код-рев’ю від сеньйора.

Помилка № 2. Вивчення С# в Unity

Є поняття мови програмування С#, а є ігровий фреймворк Unity. І починати вчити мову в самому фреймворку — фундаментально неправильно й сильно шкодить подальшому розвитку. У розробника-початківця формуються невірні зв’язки цих двох понять. Навіть принципи об’єктно-орієнтованого програмування (ООП), у рамках якого створена мова C#, засвоюються неправильно, якщо почати використовувати мову всередині Unity для створення компонентно-орієнтованої архітектури гри.

Власне, я й сам стикнувся з такою проблемою. На початку вивчення Unity я не «збагнув» принципи об’єктно-орієнтованого програмування. Тому тривалий час реалізації взаємодії між різними частинами гри викликала труднощі.

Рішення: спочатку сформувати базові навички програмування на С#, і тільки після того розбиратися в ігровому середовищі й аналізувати: які інструменти та принципи програмування на С# використовувати в Unity, а які інструменти та принципи Unity розширюють можливості самої мови програмування.

Помилка № 3. Робота з фреймворками в Unity з перших днів

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

Зараз, коли я проводжу співбесіди й бачу приклади коду з фреймворками, я обов’язково ставлю кілька запитань: для якої мети їх використали, які при цьому можуть бути обмеження. І часом люди не можуть відповісти — для них це ніби обовʼязкова складова Unity. Шаблонне мислення — це те, на що ми в команді звертаємо увагу.

Рішення: після базового вивчення мови С#, варто вивчити Unity в чистому вигляді без використання сторонніх фреймворків. Реалізація деяких задач буде схожою на «винахід велосипеда», але джуніор має пройти цей шлях та вміти працювати без них. Тоді він зможе адекватно розуміти, де цей фреймворк потрібен, а де він тільки ускладнить роботу.

Indie, фриланс чи командний проєкт

Те, що я почав вивчати програмування самотужки, призвело до помилок. Між тим, я вважаю це невіддільним етапом розвитку. Проводячи співбесіди зараз, я звертаю увагу на початковий період самонавчання, адже він говорить про кандидата дещо:

  1. Готовність розробника розібратись у чомусь новому самостійно — ознака проактивності.
  2. Власні спроби вивчення сфери допомагають позбутися деяких романтичних уявлень про геймдев та зрозуміти, чи подобається ця професія, чи хочеться розвиватися в цьому напрямі.
  3. Наявність першого самостійного проєкту допомагає в пошуках роботи. Без комерційного досвіду це зробити важко, але власний проєкт — це класний бонус.

Такий indie має перейти в новий етап — робота в команді з досвідченим ментором, що в моєму випадку допомогло виправити помилки. З командою на фрилансі я працював близько двох років. Це були різнопланові короткострокові проєкти — мобільні, десктопні, AR, VR, які часом велися одночасно. Спробувавши велику кількість різних напрямів і технологій у геймдеві, я обрав для себе мобільні ігри. Цей напрям дає широкий простір для розвитку технічних навичок у різних сферах, а також є перспективним і актуальним у геймдеві.

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

Що дає командна робота в одному проєкті й не дає фриланс — це досвід побудови правильних робочих процесів і комунікації між людьми: з яких етапів складається створення гри, як розподіляються задачі й обовʼязки між геймдизайнерами, розробниками, художниками, тестувальниками. Такі правила й домовленості дуже важливі в командній роботі і є серйозними підставами для успіхів або невдач проєкту.

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

Як почати працювати з Unity: поради новачкам

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

  1. Знайти базові курси або ментора, який пояснить основні поняття, напрями та перспективи. Мета — проаналізувати сферу, розібратись у тому, чого в ній можна досягти й що отримати від професії.
  2. Вивчити базові поняття ООП та С#, і тільки потім — Unity в чистому вигляді (без сторонніх фреймворків).
  3. Короткостроковий indie-період зі створенням самостійної гри. Альтернативний варіант — знайти поглиблені курси з Unity, а як результат — створення власних проєктів у якості домашнього завдання. Цей крок — не тільки бустер професійних навичок, а й доречна нагода для отримання першої комерційної роботи.
  4. Робота на короткострокових ігрових проєктах у команді зі зворотним зв’язком від кваліфікованого ментора. Ідеально, якщо буде можливість розглянути різні типи на напрями ігрових проєктів;
  5. Довгостроковий великий проєкт, коли відчуєте, що вже впевнено почуваєте себе в певних професійних навичках, та з’явиться потреба реалізації власних амбіцій.

Що вивчати? Стек технологій, необхідний Junior Unity Developer

Хард-скіли:

  1. Базові знання в С# — розуміння основ програмування, використання С# для реалізації поставлених завдань, розуміння та використання базових понять ООП, структури даних.
  2. Знання в Unity — розуміння основних можливостей фреймворку, структури сцен та об’єктів. Джуніор має вміти створити нескладну ігрову сцену з різними об’єктами, розуміти використання базових компонентів в Unity.
  3. Знання програмної складової роботи з Unity: С# класи ігрового фреймворку (MonoBehaviour, SceneManager, Application тощо), їхню структуру, можливості та застосування.
  4. Знання математики та фізики для формування моделей. Це важлива складова розробки ігор.
  5. Знання в суміжних сферах — система контролю версій, методології розробки програмного забезпечення, роботи по спринтах тощо.

Софт-скіли:

  1. Самоорганізованість, проактивність, терплячість. Адже, як і в будь-якій іншій професії, успіх і правильний досвід приходять не одразу.
  2. Любов до ігор. Це досить абстрактне поняття, але людина, яка любить та грає в ігри, краще засвоює правильний ігровий досвід та вміє застосовувати його на практиці.

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

По-друге, компаніям простіше запропонувати роботу новачку, призначити йому ментора, і вже дуже скоро він повноцінно інтегрується в проєкт і реалізовуватиме важливі задачі. Тому джуни не опинилися «за бортом». Шукайте можливості, прокачуйте скіли та знаходьте свій проєкт. Успіхів!

Підписуйтеся на Telegram-канал @gamedev_dou, щоб не пропустити найважливіші статті і новини.

👍ПодобаєтьсяСподобалось13
До обраногоВ обраному7
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Чи є місце для Java розробника у розробці ігор?

Привіт.
Наразі, Java інколи використовується для створення Android ігор.
Наприклад, в Unity інколи необхідно використовувати саме Java для певних задач на Android.
Крім того, мова може використовуватися для ігрового backend.

Однак, все ж більш стандартизованими та популярними для геймдеву є C++, C# та JS

Дякую за інформацію. Але нажаль зараз немає набору на курси Unity тому остається тільки самостійне вивчення

Я зараз у схожій ситуації, правда маю непогані основи в програмуванні та декілька геймджем-проектів за плечима, але все одно більшість entry level вакансій вимагають декілька років досвіду.

Проблема у курсах і викладачах на них. 90%, якщо не 99%, курсів та/або викладачав — це інфоцигани або викладачі підзабивають.
А ± нормальні курси матимуть цінник значно вище ринку. І після отих інфоциган підозра падає на всіх. І починаєш думаєш, ану їх — мо якось сам ...

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

Матеріял корисний, дуже класно, що таке пишите. Було б ще приємно, якби було схоже для UE4/5. Якщо є, то киньте в мене посилання)

Підписатись на коментарі