Хочу розробляти ігри: яку мову програмування вчити першою? Поради спеціалістів

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

Матеріал буде корисним для початківців, які хочуть програмувати і розробляти ігри, але не впевнені, з чого почати.

«В ААА існує дуже вузька спеціалізація програмістів»

Микола Грабек, Tech Artist в продуктовій IT-компанії OBRIO з екосистеми Genesis

Якщо ви читаєте статтю про вибір мов, то, найімовірніше, ви не маєте за плечима стандартний набір випускника профільного університету. У такому разі найкраще сконцентруватися на тому, що саме ви хочете робити в геймдеві. Серед новачків переважно найбільш бажаними є ААА-тайтли (високобюджетні блокбастери). Однак зазвичай немає широкого розуміння того, що в ААА є дуже вузька спеціалізація програмістів. Я, наприклад, знав людину, в професійні обов’язки якої входило лише писати lua-скрипти для камери персонажа. І більше нічого.

Поширена думка (з якою я не згоден), що треба вибирати для кар’єри ті позиції, які найбільш популярні на ринку праці.

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

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

Обравши проєкти, якими хочете займатися, варто вибрати engine (рушій), над яким хотіли б працювати більше. Це і приведе до мови, якою ви маєте користуватись.

  • Якщо ви обрали ринок інді або мобільні ігри, то, найімовірніше, будете користуватися Unity3D та писати код за допомогою Unity С#. Чому я пишу саме Unity C#, а не просто С#? Робота з мовою буде обумовлена позицією. Не так важливо, чи будете ви знати останні оновлення .NET.
  • Для B-budget indie та top-tier графіки варто обрати Unreal С++ та Blueprint. Обидві мови мають право на існування. Вже є суцільні проєкти, створені на основі графічної node-збірки на Blueprints. Водночас я хотів би поставити під сумнів думку, що на Blueprints код створюється швидше. Тут легко засвоювана візуальна node-система, але насправді всі секунди, які можна зекономити на драг’н’дроп управлінні, покриваються через IntelliSense в мовах з класичною текстовою візуалізацією. А низька професійність, що призводить до спагеті-коду у візуальному редакторі, це ще більш проблематично.
  • Якщо під час дослідження вам більше сподобається Godot, то на своїх ресурсах розробники вихваляються підтримкою цієї палітри мов. Більшість з них — об’єктноорієнтовані. Тут вже варто буде почати експериментувати, у вас буде дві категорії пріоритету: суб’єктивна — зручність синтаксису, та об’єктивна — кількість матеріалу при пошуку рішень у гуглі.
  • Цікавитесь напрямом спецефектів? Вам зрештою доведеться опанувати інструментарій створення шейдерів:
    • Шейдер-графи в Unity(URP), Unreal Engine та Godot.
    • HLSL + Unity Shader Script в Unity без URP.

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

Якщо ви правильно для себе обрали сферу, в якій прагнете працювати, то зможете подолати довгу дорогу до першого робочого місця. Ваше чітке «бачення майбутнього себе» дасть змогу набути найжаданішу характеристику, які багато роботодавців хочуть бачити в інтернах та Junior-спеціалістах — постійна робота над собою, коли ще немає першого комерційного досвіду.

«Лупайте сю скалу.» Після першого найму буде легше — тут вже маєте повірити мені на слово.

«Unity популярніший серед початківців, але й ігри на цьому рушії простіші»

Володимир Денісік, CTO в Flime by Gismart

Сучасні ігри не пишуть конкретною мовою у Visual Studio, Rider або будь-якій іншій IDE (Integrated Development Environment). Є готові ігрові рушії, від яких і залежить мова, з якою ви безпосередньо працюватимете. У геймдеві нині два основних ігрових рушії — це Unity і Unreal Engine.

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

Для Unreal Engine вам знадобиться C++. Цей рушій і мова програмування набагато складніші, ніж Unity. Але й ігри, які роблять на цьому рушії складніші, тому багато високобюджетних AAA-проєктів написані саме на ньому.

Окремо варто розглянути ситуацію, коли можна вивчити додатково мову програмування для розробки модів, плагінів та допоміжних інструментів для ігор. Сюди входять C++, Lua, Rust, Python.

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

Зображення з сайту Unity

«Краще стартувати з „більш поблажливої“ мови для користувача»

Олександр Філонічев, Tech Director World of Tanks, Wargaming

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

Наприклад, якщо це розробка геймплею — вам найчастіше знадобиться С# для рушія Unity або С++ для Unreal Engine та більшості інших. С# також може бути корисним для створення додаткових інструментів розробки.

Але цими двома мовами індустрія не обмежується. Для UI часто використовують HTML5 та JavaScript, для back-end — Python, а Java популярна для мобільних ігор.

Найпоширеніша мова в геймдеві, звичайно, С++, але я б не радив її початківцям. Краще стартувати з «більш поблажливої» мови для користувача, наприклад, С# або JS. Хоча ви й будете спочатку обмежені практично лише Unity або браузерними іграми, але швидше здобудете базові навички індустрії та з часом зможете опанувати додаткові мови. Сам я починав з С та С++, потім перейшов С#, а тоді на Python.

«Краще, коли спеціаліст має у своєму арсеналі більше як одну мову програмування»

Федір Мельніченко, Senior 3D Programmer Ubisoft Kyiv

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

З іншого боку, більшість геймдев-технологій вимагають розуміння низькорівневих процесів та того, як втілити рішення з огляду на продуктивність. У результаті це створює особливі вимоги до нього: вибір сторонніх технологій (API, бібліотек, шаблонів тощо) і, звичайно, мов (переважно C і C++).

У будь-якому разі краще, коли спеціаліст має у своєму арсеналі більше як одну мову програмування.

«Unity, напевне, один із найбільш дружніх рушіїв для початківців і самотніх вовків ігрової розробки»

Андрій Тітов, СТО Stepico Games

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

1. C/C++ — власне мені ближча C. Ця мова доволі синтаксично проста, але при цьому вчить бути стриманим, уважним і дивитися на свій код низькорівнево. Вона показує правила поведінки змінних, вказівників і решту механізмів. Також, вивчивши С і додавши до неї С++, можна отримати бонус — задоволення розповідати всім, що ти їх знаєш. Головне не потрапити на того, хто їх знає краще. В ігробудові найчастіше С++ пов’язують з Unreal (хоча він використовує свій фреймворк і стандарт, а з С++ здебільшого лишився синтаксис), його підтримку в Godot (але цей чудовий рушій підтримує аж занадто багато мов) і Cocos2d-x.

2. Ruby/Python/Bash — з цього списку я б зупинявся однозначно на Python. Його все-таки часто використовують в менших ігрових рушіях (дивлюся на візуальні новели на renpy), і загалом гарно знати поширену скриптову мову для автоматизації, маніпуляції даними й швидкої прототипізації. Ці скриптові мови є не дуже складними, але дають змогу або швидко перевіряти свої ідеї, або швидко щось налагодити, автоматизувати рутинні завдання, або поколупатися в операційній системі. Тут згадаю Lua, яка часто є основною мовою програмування у багатьох рушіях (Cryengine, напевно, найпрестижніший з них), але набагато менше стане у пригоді в ентерпрайзній розробці або маніпуляції зовнішніми системами.

3. С# - великим плюсом цієї мови є її поширеність у двох популярних рушіях — Unity i Godot (але знову ж, він підтримує усе, я очікую Fortran найближчим часом). Це означає, що відкритих ресурсів, відео, форумів і обговорень про С#, здається, більше, ніж для будь-якої іншої мови. Ще й Unity, на мою думку, — один із найбільш дружніх рушіїв для початківців і самотніх вовків ігрової розробки, що додає цій мові програмування балів.

Якщо узагальнити, однозначно «кращих» мов програмування немає. Ми з командою завжди більше уваги приділяємо знанням основ (математика, класична теорія програмування, алгоритми), підходів і найкращих практик, аніж якійсь мові й/або фреймворку.

«Я б рекомендував зробити прототип, взагалі не використовуючи жодної мови програмування і жодного рядка коду»

Віталій Янчук, Unity-розробник і Tech Artist у компанії SUITSME, що входить до екосистеми бізнесів Genesis

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

Майже всі відеоігри та рушії написані C++ або ж С-подібною мовою. Але те, що рушій на С++, ще не означає, що доведеться писати саме нею. Рушії можуть використовувати окрему мову для скриптингу. Наприклад, Unity Engine написаний на C++, але використовує C# для написання логіки гри. Це пов’язано з тим, що C# простіше використовувати, але от розробники Unreal Engine вирішили залишити всюди C++.

Якщо брати весь ринок, то серед найпопулярніших мов будуть:

1. C++

2. C#

3. JavaScript

Всі ці мови С-подібні.

Для мобільної розробки поки що абсолютний лідер за зручністю й поширеністю — Unity та C#. Для консольних та PC ігор першість тримає Unreal Engine та C++.

Але я б не недооцінював також мови:

  • Lua — як скриптову мову;
  • Rust — як основу, на якій написаний рушій.

Кількість рушіїв, що підтримують ці мови, стає дедалі більшою. До прикладу, новий Open 3D Engine з підтримкою Lua.

Усі найпопулярніші ігрові рушії мають можливість візуального скриптингу — вбудовану або ж як плагіни (Script Graphs в Unity чи Blueprints в Unreal Engine). Це допоможе швидше ознайомитись з тим, як працює рушій, його системами й патернами.

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

«Unity та C# практично не мають собі рівних»

Олег Нечитайло, Associate Lead Programmer Ubisoft Kyiv

Unity та C# практично не мають собі рівних у легкості вивчення та використання. Вони створюють чудову «яму успіху» («pit of success») та пропонують найшвидший шлях від нуля до можливості робити хоч щось, що дуже важливо для новачків.

«Я орієнтувався на спроможності рушія в плані графіки та його складність»

Марк Осипенко, Unity Dev at Syncope

Мова — це лише інструмент для створення ігор, так само як і рушій (Unity, Godot, UE тощо). Для початку потрібно визначитись із завданням. Якщо ААА-проєкти найчастіше розробляють на Unreal Engine чи власному рушії, то інді-ігри тим і відрізняються, що для них немає якось стандарту.

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

Тому краще звернути увагу не на конкретну мову, а на принципи програмування загалом. Хтозна, скільки перед вами буде задач, може для частини з них краще підійде C#, а іншої — Python. І, звичайно, англійська мова стоїть перед будь-якою мовою програмування, тому якщо ще не почали, то краще почати з неї.

Якщо казати про власний досвід, то для 2D-платформера я вибрав Unity, передусім через більшу кількість туторіалів, готових рішень і велике ком’юніті. Готових рішень не для того, щоб ними користатись, а для того, щоб на них вчитись. Все ж таки частіше доведеться писати рішення під конкретні завдання, які будуть лише у вас. Тому майте на увазі, що вибір рушія — це ще й вибір мови. Для Unity це С#. Також я орієнтувався на спроможності рушія в плані графіки та його складність. Це теж важливо, якщо треба починати робити проєкт, а не вивчати рушій пів року :)

«Якщо хочете швидко „ввійти в ІТ“, обирайте C# або Python»

Володимир Косков, Programmer Ubisoft Kyiv

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

Багато людей люблять швидко досягати мети, тому їм, імовірно, підійде рушій, в якому можна швидко все побудувати, який простий у вивченні, «програмує за допомогою миші або креслення» тощо. Тоді це буде Unity/Unreal, який вимагатиме від розробника певного знання C# або Python/JS або, можливо, навіть чогось цікавого, як-от LUA чи навіть саморобної мови сценаріїв (так, це теж своєрідне програмування).

Інша категорія людей готова ухвалювати довгострокові рішення і може присвятити себе освоєнню певного набору навичок, щоб отримувати прибуток від навчання не «тут і зараз», а років через п’ять. У такому випадку зазвичай це будуть мови низькорівневого програмування, як-от C/C++ або C# (але з глибшим розумінням у довгостроковій перспективі), або Java, або навіть Assembler XD. Для людей із ґрунтовним підходом ці мови все ще виглядатимуть як два пальці об асфальт.

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

Озираючись на власний досвід (я вирішив стати розробником ігор у 12 років), я ознайомився з багатьма різними мовами та використовував різні рушії, рішення тощо. Для мене найкращим шляхом стало першими вивчити unmanaged-мови, такі як C/C++ і Pascal. Зрештою, вони не такі й складні, але створюють міцну основу та розуміння того, як все працює і як ви як програміст маєте розподіляти свої ресурси під час розробки гри (або будь-якої іншої програми). Так перехід від некерованого коду до чогось на кшталт C# буде набагато легшим і ви зможете стати високоякісним спеціалістом.

На завершення скажу: якщо у вас є час і відданість справі, краще вибрати C++. Якщо хочете швидко «ввійти в ІТ», тоді обирайте C# або Python, і якщо вам сподобається, то витратьте час на вивчення інших речей. На мій суб’єктивний погляд, це має бути C++.

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

👍ПодобаєтьсяСподобалось8
До обраногоВ обраному3
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

Я би ще додав. Якщо хочете податися в Rendering — то потрібно непогано знати ще математику. В принципі коли механіку в іграх прописуешь теж потрібно(Вектори і матриці всюди). Але в Рендерингу там і лінійна алгебра, і тригонометрія, і все все все.

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

Я б не казав, що у Godot підтримуються аж усі мови. Підтримується те, що або підтримується розробниками (власний GDScript та C#), має нативний інтерфейс (C/C++), або активно підтримується спільнотою (в першу чергу згадується Rust, там дійсно активна підтримка з боку спільноти). В Godot 4 буде повністю нова система розширень GDExtension, і саме тоді, коли вийде стабільна версія, власне можна буде побачити, якою справді є підтримка мов на рушії. А так більшість проєктів на GDScript або C#, бо з ними розпочати простіше за все і є підтримка навіть на рівні документації.

Обрав для себе, перш за все, С++. А там вже і UE, i Godot, а також ті приватні рушії, які написали компанії для себе.

після С++ (або расту) прогаєш уже на чому хочеш. Навіть не вчивши ному мову :)

Підсумовуючи: c# для unity

Цілком логічно.

юніті уже могила. Треба годот опановувати///

Поки мобілки живі, доки юніті живий

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