Водич за крајње почетнике за развој игара у јединству

Унити је сјајан алат за израду прототипа свега, од игара, до интерактивне визуелизације. У овом чланку ћемо проћи кроз све што треба да знате да бисте започели коришћење Унити-а.

Прво, мало о мени: Ја сам програмер јединства хобиста, 3д моделар и графички дизајнер који са Унити-ом и Блендером радим више од 5 година. Сада сам студент финансијске математике на Универзитетском колеџу у Даблину и повремено се бавим слободним графичким дизајном, израђивањем веб прототипа и прототипирањем игара.

Увод

Овај чланак је намењен свима који никада раније нису користили Унити, али имају неко претходно искуство у програмирању или у веб дизајну / развоју. На крају овог чланка требали бисте имати добар општи преглед мотора, као и све потребне функције и код да бисте започели прављење основне игре.

Зашто јединство?

Ако желите да правите игре

Постоји заиста мало опција када је у питању развој Индие Гаме-а. Три главна избора ако желите да правите игре су Унреал, Унити или ГамеМакер.

Јединство је вероватно најмање расположено од три платформе. Пружа вам врло сиров производ из кутије, али је изузетно флексибилан, добро документован и изузетно проширив за изградњу готово свих жанрова игара којих се можете сјетити.

Постоји мноштво изузетно успешних игара попут Есцапе фром Тарков (ФПС), Монумент Валлеи (Пуззлер) и Тхис Вар оф Мине (Стратеги / Сурвивал) које су све уграђене у Унити.

У стварности мотор на којем градите своју прву игру вероватно није критичан, па је мој савет само да одаберете једну и кренете с њом.

Ако желите да прототипирате корисничка искуства

Будући да је јединство само мотор са гомилом физике, анимације и 3Д приказивања у реалном времену, то је такође одличан простор за израду пуноправних интерактивних прототипова за УКС студије.

Унити има пуну подршку за ВР и АР и стога би могао бити одличан алат за истраживање архитектуре, аутоматизације и симулација са клијентима.

Одељци овог чланка

  • Зашто јединство?
  • Прозор уређивача јединства
  • Објекти игре јединства
  • Унити уграђене компоненте
  • Креирање прилагођених компонената
  • Структура монопонашања
  • Манипулирање ГамеОбјецтс
  • Раицастинг
  • Детекција судара
  • Напредне функције
  • Савет за придошлице
  • Лепи ресурси и заједнице
  • Закључак

Прозор уређивача Унити

Прозор уређивача подељен је на неколико одељака. Ово ћемо врло кратко покрити, јер ћемо се на њега непрестано позивати кроз чланак. Ако вам је ово већ познато, само прескочите прошлост!

Сцене Виев: Омогућава постављање и кретање ГамеОбјецтс у Сцене Гаме Виев: Прегледа како ће играч видети сцену са камере Инспецтор: Наведите детаље о одабраном ГамеОбјецт у сцени. Имовина / пројекат: Овде се чувају сви префабриковани елементи, текстуре, модели, скрипте итд. Хијерархија: Омогућава гнежђење и структурирање ГамеОбјецтс-а у сцени

Сад смо спремни за почетак!

Објекти игре јединства

Шта су ГамеОбјецтс

ГамеОбјецтс су темељни блок свега у Унити енгине-у за игре. Име га готово одаје:

Све што сместите у сцену у Унити-у мора бити умотано у „предмет игре“.

Ако имате позадину за веб дизајн, ГамеОбјецтс можете сматрати сличним елементима! Изузетно досадни контејнери, али су изузетно прошириви за стварање сложене функционалности или визуелних елемената.

Буквално све, од ефеката честица, фотоапарата, уређаја за репродукцију, елемената корисничког интерфејса, ... (листа се наставља) је ГамеОбјецт.

Стварање хијерархије

Као и у веб развоју, ГамеОбјецт је такође контејнер. Баш као што се гнездиш да бисте креирали разнолике и пожељне распореде или апстракције, можда ћете желети да то учините и са објектима игара.

Логика гнијежђења објеката игара је приближно иста као и веб развој, даћу неколико примјера ...

Неред и ефикасност

Веб аналогија: Имате много сличних елемената који се могу динамички генерисати у ходу као одговор на интеракцију корисника и желе да буду уредни. Унити Транслатион: Ако правите клон Минецрафт-а и имате пуно блокова у сцени, морате да додате и уклоните „делове“ блокова са сцене из разлога перформанси. Дакле, имати их надређених празном ГамеОбјецт-у за сваки комад има смисла, јер брисањем надређеног дела уклањају се сви подређени блокови.

Позиционирање

Веб аналогија: Желите да задржите положај садржаја који се налази „релативно“ у односу на контејнер, а не на веб страницу. Унити Транслатион: Направили сте гомилу помоћних дронова који лебде око играча. Заиста не бисте радије писали код да бисте им рекли да јуре за играчем, па их уместо тога направите као децу објекта игре играча.

Унити уграђене компоненте

Модел глумачке компоненте

ГамеОбјецтс су сами по себи прилично бескорисни - као што смо видели, они су углавном само контејнери. Да бисмо им додали функционалност, морамо да додамо компоненте, које су у основи скрипте написане на Ц # или Јавасцрипту.

Унити ради на моделу компоненте глумца, једноставно речено, ГамеОбјецтс су глумци, а компоненте су ваше скрипте.

Ако сте раније написали било коју веб апликацију, биће вам позната идеја стварања малих компонената за вишекратну употребу, као што су дугмад, елементи обрасца, флексибилни распореди који имају различите директиве и прилагодљива својства. Затим састављање ових малих компонената у веће веб странице.

Велика предност овог приступа је ниво поновне употребљивости и јасно дефинисани канали комуникације између елемената. Исто тако у развоју игара, желимо да смањимо ризик од нежељених нежељених ефеката. Мале грешке имају тенденцију да измакну контроли ако нисте пажљиви и изузетно их је тешко отклонити. Стога је стварање малих, робусних и поновних компонената од кључне важности.

Кључне уграђене компоненте

Мислим да је време за неколико примера уграђених компоненти које пружа Унити Гамес енгине.

  • МесхФилтер: Омогућава вам да доделите материјале 3Д мрежи ГамеОбјецт-у
  • МесхРендер: Омогућава вам да доделите материјале 3Д мрежи
  • [Кутија | Месх] Цоллидер: Омогућава откривање ГамеОбјецт-а током судара
  • Ригидбоди: Омогућава реалистичну физичку симулацију да делује на ГамеОбјецтс са 3Д мрежама и покреће догађаје откривања на сударачима кутија
  • Светлост: Осветљава делове ваше сцене
  • Камера: Дефинише оквир за приказ играча који ће бити прикључен на ГамеОбјецт
  • Разне компоненте корисничког интерфејса платна за приказ ГУИ-а

Има још пуно ствари, али ово су главне са којима ћете се морати упознати. Један савет је да свим документима за њих можете да приступите путем приручника за јединство и референце скриптирање ван мреже где год да се налазите:

Креирање прилагођених компонената

Уграђене компоненте првенствено контролишу физику и визуелне елементе, али да бисте заиста направили игру, мораћете да прихватите кориснички унос и манипулишете тим стандардним компонентама, као и самим ГамеОбјецтс.

Да бисте започели креирање компоненти, идите у жељени ГамеОбјецт> Додај компоненту> унесите име своје нове компоненте у траку за претрагу> нова скрипта (ц #).

Као општу препоруку, саветовао бих да не користите Јавасцрипт у програму Унити. Није се ажурирао са свим сјајним стварима које су стигле са ЕС6, а већина напреднијих ствари ослања се на Ц # ствари пренесене на Јавасцрипт ... По мом искуству то постаје јединствено заокруживање.

Структура монопонашања

Кључне функције

Све компоненте наслеђују из класе МоноБехавиоур. Садржи неколико стандардних метода, што је најважније:

  • воид Старт () који се позива кад год се у сцени инстанцира објекат који садржи скрипту. Ово је корисно кад год желимо да извршимо неки иницијализацијски код, нпр. постави опрему играча након што се појаве у мечу.
  • воид Упдате () који се назива сваки кадар. Овде ће отићи главнина кода који укључује унос корисника, ажурирајући различита својства, попут кретања уређаја за репродукцију у сцени.

Инспектор променљиве

Често желимо да компоненте учинимо што флексибилнијим. На пример, сва оружја могу имати различиту штету, брзину пуцања, хас_сигхт итд. Иако је све оружје у основи иста ствар, можда бисмо желели да можемо брзо да направимо различите варијације кроз едитор јединства.

Још један пример где бисмо ово можда желели је када креирамо компоненту корисничког интерфејса која прати кретање корисниковог миша и поставља курсор у оквир за приказ. Овде бисмо можда желели да контролишемо осетљивост курсора на покрете (ако је корисник користио џојстик или гамепад у односу на рачунарски миш). Стога би било логично да се ове променљиве лако мењају и у режиму уређивања, а такође и да се експериментише са њима током извођења.

То можемо лако учинити једноставним декларирањем као јавне променљиве у телу компоненте.

Прихватање корисничког уноса

Наравно, желимо да наша игра одговори на улоге корисника. Најчешћи начини за то су следећи методи у функцији Упдате () компоненте (или било где другде):

  • Инпут.ГетКеи (КеиЦоде.В) Приказује да је тастер Труе В задржан
  • Инпут.ГетКеиДовн (КеиЦоде.В) Враћа тачно када се први пут притисне тастер В
  • Инпут.ГетАкис („Вертикално“), Инпут.ГетАкис („Хоризонтално“) Враћа између -1,1 уноса миша

Манипулирање ГамеОбјецтс

Једном када унесемо корисничке податке, желимо да ГамеОбјецтс унутар наше сцене одговоре. Постоји неколико врста одговора које бисмо могли узети у обзир:

  • Превод, ротација, скала
  • Направите нове ГамеОбјецтс
  • Слање порука постојећим ГамеОбјецтс / компонентама

Трансформације

Сви ГамеОбјецтс имају својство трансформирања које омогућавају извођење различитих корисних манипулација на тренутном објекту игре.

Горе наведени методи су прилично објашњени, само имајте на уму да користимо мала ГамеОбјецт за позивање на ГамеОбјецт који поседује ову специфичну инстанцу компоненте.

Генерално је добра пракса користити локалну [Поситион, Ротатион], а не глобалну позицију / ротацију објекта. То обично олакшава премештање објеката на начин који има смисла, јер ће локална свемирска ос бити оријентисана и центрирана на надређени објекат, а не на светско порекло и к, и, з правце.

Ако требате да претворите између локалног и светског простора (што је често случај), можете да користите следеће:

Као што можете замислити, иза овога постоји прилично једноставна линеарна алгебра на коју наговештава „Инверзно“ у називу методе.

Креирање нових ГамеОбјецтс

Пошто су ГамеОбјецтс у основи све на вашој сцени, можда бисте желели да их можете генерисати у ходу. На пример, ако ваш играч има неку врсту покретача пројектила, можда бисте желели да будете у могућности да креирате пројектиле у лету који имају своју инкапсулирану логику лета, наношења штете итд ...

Прво морамо да представимо појам монтажног материјала . Можемо их створити једноставним превлачењем било ког ГамеОбјецт-а у хијерархији сцене у директоријум средстава.

Ово у основи чува предложак објекта који смо управо имали на сцени са истим конфигурацијама.

Једном када имамо ове префаб компоненте, можемо их доделити инспекторима променљивим (као што смо раније говорили) на било којој компоненти у сцени, тако да у било ком тренутку можемо створити нове ГамеОбјецтс како је наведено у префабу.

Затим можемо извршити „инстанцирање“ монтажног дела и манипулисати њиме до жељеног места у сцени и успоставити неопходне родитељске односе.

Приступ другим ГамеОбјектима и компонентама

Често морамо да комуницирамо са другим ГамеОбјецтс-има, као и са њима повезаним компонентама. Једном када се референцирате на неки предмет игре, ово је прилично једноставно.

ЦомпонентНаме цомп = соме_гаме_објецт.ГетЦомпонент ();

Након тога можете приступити било којој од јавних метода / променљивих компоненте како бисте манипулисали ГамеОбјецт-ом. Ово је једноставан бит, међутим заправо добијање референце на ГамеОбјецт може се извршити на неколико начина ...

Приступ преко променљиве инспектора

Ово је најједноставније. Једноставно креирајте јавну променљиву за ГамеОбјецт, као што смо раније показали са префабима, и ручно је превуците и испустите на компоненту преко инспектора. Затим приступите променљивој као горе.

Приступ путем означавања

Преко инспектора можемо да означимо ГамеОбјецтс или префабс, а затим помоћу функција проналажења игара пронађемо референце на њих.

Ово се једноставно ради на следећи начин.

ГамеОбјецт соме_гаме_објецт = ГамеОбјецт.ФиндГамеОбјецтВитхТаг (“Опека”);

Приступ путем трансформације

Ако желимо да приступимо компонентама у неком родитељском објекту, то можемо лако учинити путем атрибута трансформ.

ЦомпонентНаме цомп = гамеОбјецт.трансформ.парент.ГетЦомпонент ();

Приступ путем СендМессаге-а

Алтернативно, ако желимо да пошаљемо поруку многим другим компонентама или желимо да поручимо објекат који је далеко изнад угнежђене хијерархије, можемо користити функције слања порука, које прихватају име функције праћене аргументима.

гамеОбјецт.СендМессаге (“МетходНаме”, парамс); // Емитирање мессагегамеОбјецт.СендМессагеУпвардс („МетходНаме“, парамс); // Примају само компоненте које су горе угнежђене.

Раицастинг

Можда сте већ чули за ово када људи упоређују ФПС игре које су „засноване на физици“ или „засноване на зрацима“. Раицастинг је у основи као да поседујете ласерски показивач који, када дође у контакт са „сударачем“ или „крутим телом“, врати „погодак“ и проследи детаље објекта.

Постоје два сценарија када ово добро дође (вероватно их има још):

  1. Ако сте дизајнирали систем оружја за игру, могли бисте да користите зрачење за откривање погодака, па чак и да прилагодите дужину зрака тако да ручни предмети 'погађају' само на малим дометима
  2. Створите зрак од показивача миша до тачке у 3Д простору, тј. Ако желите да корисник може да бира јединице помоћу миша у стратешкој игри.

Као што видите, код за ово је мало више укључен. Кључна ствар коју треба разумети је да је за бацање зрака тамо где миш показује у 3д простору потребна трансформација СцреенПоинтТоРаи. Разлог томе је што камера приказује 3Д простор као 2д приказ на екрану вашег лаптопа, тако да је наравно предвиђена и пројекција за повратак у 3д.

Детекција судара

Раније смо споменули Цоллидер и Ригидбоди компоненте које се могу додати објекту. Правило за сударе је да један предмет у судару мора имати круто тело, а други сударач (или оба имају обе компоненте). Имајте на уму да ће приликом коришћења зрачења зраци деловати само са објектима са причвршћеним компонентама сударача.

Једном када подесимо било коју прилагођену компоненту која је прикачена на објекат, можемо да користимо методе ОнЦоллисионЕнтер, ОнЦоллисионСтаи и ОнЦоллисионЕкит да одговоримо на судар. Једном када добијемо информације о колизији, можемо да одговоримо за ГамеОбјецт и да користимо оно што смо раније научили за интеракцију са компонентама повезаним са њим.

Једна ствар коју треба приметити је да крута тела пружају физику попут гравитације за објекте, па ако желите да се ово искључи, мораћете да проверите да ли је ис_кинематиц укључен.

Напредне функције

Нећемо улазити ни у шта од овога сада, али можда у будући чланак - само да бисмо вас обавестили да постоје.

Креирање ГУИ-а

Унити има потпуно развијен УИ енгине за постављање ГУИ-а за вашу игру. Генерално, ове компоненте раде прилично слично као и остатак мотора.

Проширивање Унити Едитор-а

Унити вам омогућава да инспекторима додате прилагођена дугмад како бисте могли да утичете на свет током режима уређивања. На пример, за помоћ у изградњи света можете развити прилагођени прозор алата за изградњу модуларних кућа.

Анимација

Унити има систем анимације заснован на графикону који вам омогућава да мешате и контролишете анимације на различитим објектима, попут играча који имплементирају систем анимације заснован на костима.

Материјали и ПБР

Унити покреће физички заснован механизам за приказивање који омогућава осветљење у реалном времену и реалне материјале. Реалност је да ћете прво морати научити 3д моделирање или користити моделе које је неко други направио и оптимизовао пре него што дођете до овога, како бисте направили ствари које у ствари изгледају добро.

Савет за придошлице

Ако планирате да напишете своју прву игру, не потцењујте сложеност и време потребно за писање чак и нај тривијалнијих игара. Запамтите да већина игара које излазе на Стеам-у имају тимове који годинама раде на њима!

Изаберите једноставан концепт и поделите га на мале достижне прекретнице. Препоручује се да своју игру одвојите на што мање независне компоненте, јер је много мања вероватноћа да ћете наићи на грешке ако компоненте држите једноставним, а не монолитним блоковима кода.

Пре него што кренете и напишете било који код за било који део своје игре, идите и истражите шта је неко други раније радио да би решио исти проблем - шансе су да ће имати много клизавије решење.

Лепи ресурси и заједнице

Дизајн игара има једну од најбољих заједница међу свима нама, а у индустрији постоји мноштво високо квалификованих професионалаца који стављају садржај бесплатно или у бесцење. То је поље које захтева 3д моделере, концепт уметнике, дизајнере игара, програмера и тако даље. У наставку сам повезао неке сјајне опште ресурсе на које сам наишао за свако од ових поља:

Концептна уметност

  • Школа дизајна Фенг Зху (преко 90 сати водича за концепт уметност)
  • Тилер Едлин Арт (сјајна уметничка заједница БСТ-а са повратним информацијама професионалаца о месечним изазовима)
  • Арт Цафе (Интервјуи и радионице са познатим концептуалним уметницима)
  • Трент Каниуга (илустратор и 2Д уметник који такође прави своју игру)

3Д моделирање

  • ЦГ колачић (најбоље основе мрежног моделирања у Блендер-у икад, имају гомилу другог изврсног садржаја за блендер)
  • Тор Фрицк (Моделатори тврде површине и вајари у блендеру)
  • Глеб Александров (кратки моћни водичи за приказивање у Блендеру)

Дизајн игара

  • ДоублеФине Амнесиа Фортнигхт (ГамеДевс који направе двонедељни хакатон и сниме цео свој процес дизајнирања)
  • ГамеМакерс Тоолкит (Испитује принципе дизајна игара)

Програмирање

  • Ручно израђени херој (писање игре и мотора од нуле на Ц)
  • Јонатхан Блов (Индие програмер који уживо преноси његов развој игара)
  • Брацкеис (Лепе уџбеничке лекције)

Закључак

Надам се да вам се свидео овај водич! Радим мало графичког дизајна, као и прототипове игара и корисничког интерфејса, па погледајте мој портфолио ! Такође сам повезан на .

Портфељ|. | ЛинкедИн