Програмистът на игри е човекът, който превръща виждането на дизайнера в реалност, като го прави да работи в игровия двигател, който използваме. Аз работя в екипа за програмиране на мобилни игри в Kwalee, така че за нас основно Unity. Например, ако дизайнерът иска заровете да се търкалят по определен начин, аз пиша скрипта, който управлява логиката. Също така си сътрудничим с артистите, за да се уверим, че нашите игри изглеждат невероятно, но и постигат страхотна производителност на устройството.
В този блог ще черпя от моите пет години работа в Kwalee, за да споделя основни наблюдения и съвети за това какво означава да си програмист на игри. Ще ви разходя през някои от езиците, инструментите и принципите, които използваме, както и съвети за кариерата ми, както за начинаещи, така и за напреднали.
Какво прави един програмист на игри?
Ние пишем кода и помагаме на играта да стане реалност. Докато дизайнерите на игри създават концепции, а артистите създават активи, програмистът създава функционалния, играем опит. Ние създаваме и оптимизираме производителността на играта и отстраняваме всякакви проблеми, които са идентифицирани.
Ние осигуряваме, че играта се чувства страхотно и работи с висока производителност. За целта трябва да гарантираме, че самият код е чист и разширяем, което е по-трудно, отколкото си мислите. Използваме стандартите за кодиране, за да поддържаме постоянна качеството във всички наши екипи - документ, който може да съдържа стандарти за наименуване, форматиране и др. Понякога обаче нещата не са винаги ясни, и от време на време може да се наложи да мислите извън кутията, за да свършите нещата навреме.
Нашите отговорности също вклучват осигуряване, че играта работи добре на хардуера на крайния потребител. Например, в нашите мобилни игри трябва да избягваме по-стари устройства да не се загряват твърде много, така че работим с артистите, за да оптимизираме броя на "draw calls". "Draw call" е команда, изпратена от Централната обработваща единица (CPU) към Графичния процесорен модул (GPU) за изобразяване на обект на екрана - тя казва на GPU да нарисува графични елементи като текстури, мрежи или шейдъри. Трябва да минимизираме броя на тези "draw calls" в нашата игра, защото наличието на твърде много може да причини проблеми като спадане на скоростта на кадрите или насичане. Има много начини да се реши това, но неща като групиране на множество обекти в едно "draw call" или намаляване на броя на уникалните текстури и материали могат да помогнат. Това е особено важно за мобилни устройства, тъй като на пазара има толкова много различни устройства, всички с различни технически спецификации.
Кои са основните езици за програмиране на игри?
По-голямата част от времето като програмисти на игри прекарваме в скриптиране на един от многото езици за програмиране - ние сме софтуерни разработчици от различен тип все пак. Има много езици за избор. Някои изглеждат по-лесни от други, но след като сте научили и овладели един, определено можете да научите други - основното предизвикателство е да влезете в индустрията.
Ето въведение в някои от най-популярните езици за програмиране на игри:
- C# - универсален и популярен език за програмиране, широко използван в разработката на игри. Той е един от най-лесните за овладяване, ако сте начинаещ. Една от най-добрите му характеристики е автоматичното управление на събирането на боклук - така че управлява разпределението на паметта за вас - много полезно за заети програмисти като нас.
- C++ - в контраст, това е неуправляем език, така че трябва ръчно да разпределяте и освобождавате памет, което го прави по-голяма крачка към сложността и трудността. Въпреки това, той позволява по-голяма бързина, контрол и производителност.
- Java - подобно на C#, Java има свое управление на паметта и събиране на боклука, което прави по-лесно за разработчиците да се справят с паметта без да се задълбават в детайли. Той е широко използван в уеб разработката и корпоративни приложения, и макар че не е (спорно) най-добрият избор за разработка на игри, остава стабилен вариант за създаване на мащабируеми и ефективни приложения.
- Swift - това е натуралният език на Apple за изграждане на приложения и игри за iOS и macOS. Въпреки това, това означава, че е по-малко полезен за крос-платформената разработка - тъй като ние се стремим винаги да публикуваме нашите мобилни игри както на Android, така и на iOS.
Как ставате програмист на игри?
Има множество начини да станете програмист на игри. Моят път е доста традиционен - изучавах Дизайн и Програмиране на игри в Университета на Стафордшир. Първоначално мислех, че ще вляза в областта на изкуството за игри - винаги бях много запален по изкуството още от дете, плюс, че много обичах курсовете по изкуство в университета, но докато бях там, открих, че много ми харесва да създавам игрови процеси. Може да ми отнеме няколко дни, за да създам един високоякостен модел, но мога да накарам патица да лети и да се взриви наполовина по-бързо. Прототипирането ми позволява да видя резултата веднага пред мен.
Обаче, красотата на програмирането на игри е, че то е достъпно за повечето хора, дори и да не преминете през традиционен маршрут. Имах приятели в университета на възраст над 50 години - никога не е късно да изпитате нещо ново. В Kwalee дори сме наели човек, който основно е учил чрез YouTube видеоклипове и е направил игра за забавление. Днес има толкова много възможности за свежи и амбициозни таланти. Гледайки портфолиото на новите студенти, те имат толкова много опит зад гърба си. Виждаме фантастични таланти и е вълнуващо време за индустрията.
Въпрос, който вероятно сте наложили - дали AI ще повлияе на програмирането като кариера? Той може да бъде изключително полезен и става по-добър. Перфектен е ако ви е необходимо нещо обяснено или сте попаднали в проблем. Можете да го използвате за отстраняване на грешки или за рефакториране ("почистване") на кода си, като го поставите в най-новия ChatGPT. Въпреки това, когато разглеждаме портфолиото, искаме да видим работата, която сте извършили и с която се гордеете, AI е ОК да се ползва, но опитайте да не го използвате като замяна на собствени си умения.
Как изглежда типичният ден на програмист на игри?
Нека дам пример основан на моя живот. Аз съм Главен програмист (наричам го моята мечтана работа), така че това е отлично съчетание на ръководене и управление на други програмисти!
Типичният ден за мен е да вляза, да си взема лате, и след това да проверя за грешки или блокери за екипа по осигуряване на качеството. Проверка с екипа, за да видя дали някой има нужда от мен да направя нещо, за да им помогна в работата. След това музиката тръгва и списъкът със задачите се появява. Споделяме видеоклипове за напредък в Slack, за да получим бърза обратна връзка, докато същевременно балансираме между 2-3 проекта, за да поддържаме членовете на екипа си. Също така прекарваме много време, инвестирайки в споделени системи, за да направим програмирането си по-ефективно - всичко това трябва да се поддържа, обновява и поправя редовно, за да работи гладко.
Съвети за начинаещи програмисти
Ако започвате и искате да станете опитен програмист, ето моите съвети за начинаещи!
- Има толкова много да научите онлайн, на YouTube и има толкова много примерни игри, че нямате извинение да не се учите! Популярните двигатели са безплатни и са много забавни за използване!
- На противоположен край на спектъра, дори ако е на 30 години, трябва да опитате да прочетете влиятелната книга "Design Patterns: Elements of Reusable Object-Oriented Software" от така наречените автори The Gang of Four, която въведе някои от основите на игровите модели, които използваме всекидневно в програмирането.
- Може да имате свои идеи, но се уверете, че започвате просто, за да сте запознати с основите.
- Когато не сте вързани към комерсиален проект, можете да пишете колкото код поискате, така че имайте много забавления, създавайки абсурдни неща.
- Изграждането на портфолио е от съществено значение (и това е как си намерих работата). Но бъдете много внимателни да не качвате същите стари стандартни работи от университета, защото ще видим много кандидатури с тях. Дори отделянето на допълнителен ден за преработка на скина и добавяне на повече функции ще ви помогне да изпъкнете.
- Създаването на собствена реална игра също е умно решение - много евтино е да поставите игра в Google Play, така че изкарайте нещо, което можете да покажете на рекрутъри/издатели/семейство/домашни любимци на телефона си. Може дори да изкарате няколко хиляди долара годишно, докато не се установите с ексклузивна постоянна работа, което е бонус! Или може да се изкушите да направите собствена пълноценна игра и да си партнирате с издател.
- Не учете само за програмиране - научете за изкуство, дизайн, QA и други дисциплини, с които ще взаимодействате. Например, заслужава си да разбирате QA методите, защото можете да попаднете в капана да предполагате, че нещо работи, но трябва да го изиграете като потребител, а не като някой, който е написал кода и има дефинирано виждане за това как очаква да се играе. Бъдете разрушителни, опитайте случайните неща, които хората могат да направят, натискайки случайни бутони и други странни поведения.
Съвети за напреднали програмисти
Ето някои от съветите, които ми помогнаха да премина от младши на програмист, на старши и накрая на главен програмист.
- Винаги можете да се възползвате от повече учене и помнете, че без грешки не можем да учим!
- Ако сте наистина запалени по нещо - можете да станете по-специализиран. Например, ако обичате да играете със шейдъри и конвейери за изобразяване, научете как да използвате графични шейдъри, за да разширите способността си да изобразявате сложни визуални ефекти и да използвате конвейери за изобразяване, за да оптимизирате производителността или да направите някои удивителни ефекти.
- Можете да направите нещо наистина готино, като сложна система, качете го в магазин за активи, за да го покажете ако вашият договор позволява и да покажете вашата напреднала работа. Можете да развиете ниша като определен тип програмист, като геймплей програмист, сървърен програмист, графичен програмист или програмист за мултиплеърни игри.
- Алтернативно, можете да поемете мениджърски маршрут като мен и да наставлявате хора. Моята тактика за напредване в кариерата ми беше да поемам нови отговорности. Първо започнах с подобряване на малки неща, т.е. малки промени в работния поток.. След това направих процесите по-лесни, като използвах шаблони за спестяване на време при създаването на нови проекти. След това усетих вкуса на наставничеството и управлението, което ми помогна да увелича увереността си и сега участвам в прегледи от партньори, прегледи на код, организиране на уъркшопи и водене на екипи по проекти.
Дали работите като част от екип или като мениджър, също толкова важно е да давате похвали, колкото е да давате конструктивна критика. Когато преглеждате кода, е добре да мотивирате хората!
Кои са ключовите принципи на програмирането на игри?
Има някои ключови теми, които просто трябва да влязат в блог, който обхваща програмирането на игри. Това са някои от най-важните неща, които разглеждаме.
Контрол на източника/Версионен контрол
Точно както имате точки за запазване в игрите, има точки за запазване в разработката на проекти. Те действат като общо хранилище за проекта и означават, че трима или четирима програмисти могат едновременно да работят върху система, да създадат промяна и да я изпратят до сървъра. Това позволява да следим тези промени и лесно да се връщаме, ако нещо се счупи. Ако двама разработчици работят върху един и същ файл, този файл ще стане част от сливане, ако има конфликти можем да ги разрешим ръчно или да изберем промените на индивид да се приложат. Това ще се случва често при използване на префаби или сцени в Unity.
Тези термини понякога се припокриват, но обикновено контрол на източника се фокусира върху кода, а версионният контрол включва всички проектни файлове, активи и документация.
Когато за първи път започвате да използвате Контрол на източника, може да се почувства малко страшно отначало, може да изглежда много преобладаващо и когато става въпрос за конфликти може да се окажете несигурни какво да правите. Но естеството на версионния контрол ви помага да запазвате моменти във времето, така че ако често актуализирате и използвате подробни съобщения за комит, е изключително полезно и безопасно. Можете да се върнете към различни моменти, да имате няколко клона и т.н. Помислете за това като за мрежа за безопасност на разработчика, така че можем да избегнем версия като на Pixar's Toy Story 2 - случайно изтрита и след това възстановена от твърд диск в дома на техния Технически директор, вместо това всичко е сигурно там на сървъра.
Обектно ориентирано програмиране
Това е типът програмиране, който основно използваме в Kwalee. Той използва обекти, за да представя реални неща или абстрактни концепции и цели се да организира базата на кода, използвайки принципи, които отразяват как виждаме и взаимодействаме с обекти в реалния свят. Помага за поддържане на сложни системи чрез организиране на кода в отделни класове, които можете да използвате повторно, мащабирате и поддържате по-лесно.
Разбира се, има дебати дали е добър или не. Макар че не е най-високо производителната, тя работи добре. Както и при езиците, всеки има свои плюсове и минуси и трябва да научите един за начало и да се запознаете с това как работят езиците и компилаторите (преводачи на човешки код в машинен код). Можете също така да разгледате и други типове, като функционално програмиране, което го третира повече като математика, логическо програмиране, което използва факти и правила или процедурно програмиране, което използва стъпка по стъпка данни.
Програмни шаблони
Тези са изключително полезни - повторно използваеми решения, които могат да помогнат с общи проблеми, с които ще се сблъскате във вашия софтуерен дизайн. Те ви дават шаблон за поправка на проблем, така че не е необходимо да изобретявате колелото всеки път и можете да следвате доказани решения.
Например, шаблонът сингълтон (Singleton) ви помага да осигурите, че има само един екземпляр на клас като мениджър на настройките на играта през цялата ви игра и ви дава глобална точка за достъп до него. Кодът за този шаблон означава, че съществува само един екземпляр на класа SettingsManager, така че няма нужда да го създавате или дублирате всеки път, когато ви е необходим.
Има и шаблонът фабрика (Factory), който може да ви помогне да създавате обекти по по-организиран и гъвкав начин. Можете да дефинирате методи за генериране на конкретни типове обекти, като персонажи или елементи, въз основа на входни параметри, позволяващи ви лесно да създавате повече обекти от подобен тип, без да започвате от нулата всеки път.
Надявам се, че този блог ви е дал вкус към програмирането на игри, независимо дали сте нови в областта или опитен програмист! Ако сте трудолюбив, но забавен човек, вие ще подхождате на нашия екип, така че научете повече за кариерата в Kwalee. В противен случай можете да научите за нашите мобилни игри или публикуване и да се запознаете с повече от това, което издаваме като разработчик и издател.








