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

Програмирање игре са јединством: Водич за почетнике
Овај водич је доступан за преузимање као бесплатни ПДФ. Преузмите ову датотеку сада . Слободно копирајте и поделите ово са пријатељима и породицом.

Изненађујућа карактеристика интернет економије је пораст независних видео игара. Некада ексклузивни домен студија са више милиона долара, три милиона А, развијен је низ алата који доносе савремене ресурсе за развој игара у руке појединаца или малих, ад-хоц колекција програмера и дизајнера. Раније смо разговарали о најбољим индие играма, па их потражите ради инспирације о томе шта се може постићи помоћу алата као што је Унити.





Ови тимови за развој независних игара показали су агилност и толеранцију на ризик који им, у многим случајевима, омогућава да брже развијају иновације у игрању од својих великих буџетских колега. Бројни шокантно успешни индие наслови премијерно су приказани последњих година, укључујући Минецрафт , Лимбо , и Супер Меат Бои , па чак и ако не морате имати вјештине за прављење оваквих игара, можете направити игру користећи Буилдбок.





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





Чак и велики студији као што је ЦЦП (Девелоперс оф Еве Онлине ) користите га за брзо прототипирање концепата игара. Унити нуди „механизам за игре у кутији“ - механизам за физику и рендеровање са кукама за неколико скриптних језика, прилагодљив практично сваком жанру видео игара.

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



Унити неће обавити посао умјесто вас, али значајно смањује баријеру за улазак. Почињући потпуно од нуле са Ц ++ и ОпенГЛ -ом, могу проћи дани да дођете до тачке у којој се заиста нешто приказује на екрану. Користећи Унити, потребно је око десет секунди. Унити даје основне елементе стварања игара у руке програмерима почетницима на брз, интуитиван начин.

Данас ћу вас водити кроз све што требате знати да направите игру у Унити -у, која је подељена на десет главних поглавља:





§1 - Верзије јединства

§2 - Инсталирање Унити -а





§3-Кратак увод у објектно оријентисану парадигму

§4 - Основе јединства

§5 – Пример: Основни елементи игре

§6 – Скриптирање у јединству

§7 – Пример: Скриптни понг

§8 - Истраживање документације / Сазнајте више

§9 - Изградња ваше игре / компајлирање у самосталну апликацију

§10-Завршне напомене

1. Верзије јединства

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

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

1.1 Одређивање цена

Бесплатна верзија Унити -а је, наравно, бесплатна. Међутим, постоји неколико ограничења: бесплатна верзија Унити -а не може се лиценцирати ниједној компанији са годишњим приходом већим од 100.000 долара . Иако такве организације излазе из оквира овог водича, ако сумњате да бисте могли постати таква организација, вероватно је паметно одлучити се за Про верзију.

Про верзија Унити -а је 75 долара месец, или 1500 долара за сталну лиценцу и нема ограничења у погледу тога шта можете да радите са играма направљеним са њом. Доступна је и бесплатна пробна верзија од 30 дана, коју ћемо користити за овај водич, како бисмо вам пружили што потпунији преглед доступних функција. Једногодишња студентска лиценца доступна је и путем Студи за 129 долара .

1.2 Карактеристике

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

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

2. Инсталирање Унити -а

Унити је једноставно инсталирати. Извршну датотеку можете преузети са Унити3д.цом/гет-унити/довнлоад .

Када га преузмете, покрените га, а затим следите упутства за инсталацију. Када се инсталација заврши, појавит ће се прозор под називом 'активирај своју Унити лиценцу'. Потврдите избор у пољу за потврду „активирај бесплатну 30-дневну пробну верзију програма Унити Про“, а затим „У реду“.

Честитам! Сада имате 30-дневно пробно време за Унити Про. Када пробни период истекне, ако не желите да купите професионалну верзију, можете да пређете на бесплатну верзију и задржите постојећи садржај.

вишеструка зависна падајућа листа екцел

3. Кратак увод у објектно оријентисану парадигму

Пре него што почнете са Унити -ом, важно је да мало пређемо на основе. Јединство подржава обоје Ц # и ЈаваСцрипт за програмирање игара ; радићемо са Ц# за овај водич.

Пре свега, ако никада раније нисте програмирали, оставите овај водич по страни и проведите неколико дана радећи кроз Мицрософт -ове Ц # Лангуаге Пример док се не будете осећали угодно користећи језик за једноставне задатке.

Ако желите нешто мало другачије од Ц# (али не нужно језик који можете користити у Унитију), онда погледајте наш водич кроз шест најлакших програмских језика за почетнике.

Ако сте раније програмирали на императивном или објектно оријентисаном језику попут Ц или Јаве, прелистајте пример и упознајте се по чему се Ц# разликује од других језика које сте користили у прошлости. У сваком случају, немојте наставити са водичем све док вам не буде пријатно да решавате једноставне проблеме са Ц# (на пример, ако бих вас замолио да напишете програм који штампа првих сто простих бројева, требали бисте моћи да га напишете без консултовање Гоогле -а).

Најважнији концепт за разумевање овде је објектно оријентисана парадигма (скраћено као ОТВОРЕНО ). У објектно оријентисаним језицима програми су подељени у функционалне целине тзв Објекти . Сваки објекат има своје приватне променљиве и функције. Зову се функције специфичне за објекат методе .

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

Објекти се креирају из класе : класа је само датотека која поставља дефиницију вашег објекта. Дакле, ако желите а моок објект који рукује АИ за непријатеља у вашој игри, написали бисте класу 'Моок', а затим ту датотеку приложили за сваки непријатељски ентитет. Када покренете игру, сваки непријатељ ће бити опремљен копијом предмета 'Моок'.

Прилагање нове скрипте објекту изгледа овако:

Први, изаберите објекат и идите на Инспекторе . Кликните на Додајте компоненту дугме.

Иди на ново писмо , унесите жељено име и кликните креирати и додавати .

Сада имате нову скрипту коју можете уредити двоструким кликом на њу!

Датотека класе изгледа отприлике овако:

using UnityEngine;
public class Mook : MonoBehaviour {
private float health;
void Start () {
health = 100;
}
void Update(){
if (health > 0) {
/* Search for player
if you encounter the player on the road, kill him
if you get shot, remove a random amount of health */
}
}
}

Хајде да рашчланимо ово:

  • Коришћење УнитиЕнгине: Ова линија говори Ц# -у да желимо да користимо Унити -ове библиотеке, које нам омогућавају да се повежемо на Унити енгине за игре.
  • Јавна класа Моок: Монопонашање: Ова линија декларише класу и њено име - моок .
  • Приватно здравље плутача: Ово декларише приватну променљиву класе (која се може променити само унутар класе). Променљивој се даје вредност у Почетак .
  • Воид Старт (): Ово декларише метод тзв Почетак . Старт је посебна метода која се покреће само једном, при покретању игре.
  • Воид Упдате (): Ажурирање је још једна посебна метода која се изводи на сваком оквиру. Већина ваше логике игре ће ићи овде.
  • // ако наиђете на играча на путу, убијте га: Ова линија је коментар (Ц#занемарује сваки ред који почиње двоструком косом цртом). Коментари се користе да бисте се подсетили шта одређени делови кода раде. У овом случају, овај коментар се користи за означавање сложенијег блока кода који заправо ради оно што коментар описује.

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

public float addTwoNumbers(float a, float b) {
return a+b;
}

Ово декларише јавну (доступну другим објектима) методу која враћа флоат, тзв аддТвоНумберс , који узима два пловка као улаз (тзв до и б ). Затим враћа збир две вредности као излаз.

Позивање ове методе из исте класе (рецимо, изнутра ажурирање ) изгледа овако:

float result = addTwoNumbers(1, 2);

Позивање методе из друге класе је слично:

addTwoNumbers instance;
float result = instance.addTwoNumbers(1, 2);

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

Ако је ваша скрипта повезана са објектом који има посебна својства (попут емитера честица) којима се не може приступити под нормалним скупом ГамеОбјецт параметара, можете изабрати да га третирате као другу врсту ентитета игре користећи ГетЦомпонент метода.

Синтакса за то изгледа овако:

GetComponent().Play();

Ако вам нешто од овога није познато, вратите се назад и прођите кроз Ц# пример. То ће вам уштедети много фрустрација док настављамо.

4. Основе јединства

У овом одељку ћемо проћи кроз основне механике Унити мотора. Ток рада у Унити -у иде отприлике овако:

  1. Направите ентитет који ће играти улогу у игри (празно ГамеОбјецтс може се користити за апстрактне логичке задатке).
  2. Напишите или пронађите датотеку класе и додајте је у ентитет као скрипту (користећи Додајте компоненту дугме у инспектор поглед.
  3. Трцати > тест > отклањање грешака > понављање док не проради и пређите на следећи елемент игре.

Унити долази са неколико основних картица приказа које се могу поставити на различите начине по укусу корисника. Великих пет су:

  1. Игра: приказује покренуту инстанцу игре са којом можете да комуницирате и тестирате.
  2. Сцена: пружа статичку верзију свет игре .
  3. Инспектор: омогућава вам да мењате појединачне ентитете у свету игара тако што ћете их изабрати у уредник таб.
  4. Пројекат: омогућава вам да прегледате датотеке пројекта и превучете моделе, материјале и друге ресурсе у уредник картицу да бисте их поставили у свет игара.
  5. Хијерархија: ова картица приказује све објекте на свету, омогућавајући вам да пронађете удаљене објекте у сцени, и родитељске ентитете један другом кликом и превлачењем.

Погледајте доњи дијаграм за локације свих ових ствари:

4.1 Ентитети јединства

4.1.1 Мреже

Мреже су пут 3Д геометрија представљен је у Јединству. Можете користити уграђени Унити примитивна објекте (коцке, сфере, цилиндре итд.), или увезите сопствене 3Д моделе из пакета за моделирање, нпр. Блендер или Маиа . Унити подржава различите 3Д формате, укључујући .фбк , и .3дс .

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

4.1.2 ГУИ елементи

Традиционални ГУИ спрајтови и текст могу се приказати помоћу ГУИ Тект и ГУИ Тектуре ГамеОбјецтс у уређивачу. Међутим, робуснији и реалнији начин руковања елементима корисничког сучеља је кориштење 3Д текст и Куад ГамеОбјецтс (са провидним текстурама и неосветљеним провидним сенчником) за постављање ХУД елемената у свет игре као целине.

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

Елементи графичког корисничког сучеља (текст и текстуре) могу прилагодити своју величину и скалу помоћу одговарајућих поља на картици Инспецтор.

4.1.3 Материјали

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

Да бисте увезли текстуру, претворите је у .јпг , .пнг , или .бмп , и превуците га у средства фасциклу у директоријуму пројекта Унити (који се појављује у Моји документи подразумевано). Након неколико секунди, у уређивачу ће се појавити трака за учитавање. Када се заврши, моћи ћете да пронађете слику као текстуру испод пројекат таб.

4.1.5 Светла

Светла су ГамеОбјецтс који пројектују сјај на свет. Ако на вашој сцени нема светла, сви полигони се исцртавају на истом нивоу осветљености, дајући свету раван, испран изглед.

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

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

Три су главне врсте светлости место , тачка , и усмерено .

Спот светла имају локацију у 3Д простору и пројектују светлост само у једном смеру у конусу променљивог угла. Они су добри за батеријске лампе, рефлекторе и генерално вам дају прецизнију контролу осветљења. Спот светла могу да баце сенке.

Тачкаста светла имају локацију у 3Д простору и равномерно бацају светлост у свим правцима. Тачкаста светла не бацају сенке.

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

4.1.6 Системи честица

ДО Систем честица је ГамеОбјецт који генерише и контролише стотине или хиљаде честица истовремено. Честице су мали, оптимизовани 2Д објекти приказани у 3Д простору. Системи честица користе поједностављено исцртавање и физику, али могу приказати хиљаде ентитета у реалном времену без муцања, што их чини идеалним за дим, ватру, кишу, искре, магичне ефекте и друго.

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

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

5. Пример: Основни елементи игре

За овај водич ћемо направити једноставну игру Понг - нешто што смо већ неколико пута обрадили у ДИИ-у раније:

  • Ардуино Цлассиц Понг
  • Ардуино ОЛЕД Понг

У овом одељку ћемо прећи на сређивање основних елемената - водич за скриптовање ће доћи касније.

Прво, поделимо игру Понг на њене основне компоненте. Прво, требају нам два весла и лопта. Лопта лети изван екрана, па ћемо желети механизам да је ресетујемо. Такође желимо да текст приказује тренутни резултат, а ради приказивања свих основних елемената Унити -а, желећемо елегантан ефекат честица када ударите лопту. Цела игра ће морати бити драматично осветљена.

То се дели на а куглични предмет (сфера), а спавнер , два веслачка реквизита са емитери честица у прилогу, а Ентитет 3Д текста , и а спот светлост . За овај водич користићемо подразумевани физички материјал одскочити , са одскочити комбајн подешен на умножити . Ево како изгледа подешавање, на десет снимака екрана:

Прво креирајте а коцка подупирач за весло.

Прилагодите га на одговарајући начин, дуплирајте га , и ставите а сфера између лопатица за лопту.

Затим креирајте а 3ДТект објекат и Скала и положај исправно, мењајући величина фонта атрибут да бисте добили мање пикселизовану слику.

Затим креирајте два системи честица , одаберите карактеристике које желите и причврстите их на весла.

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

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

Ако притиснете плаи, сада можете видети основне елементе наше игре постављене. Неће још ништа урадити, али доћи ћемо до тога!

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

6. Скриптирање у јединству

Када имате скрипту приложену објекту, можете је ревидирати двоструким кликом на њу у инспектор . Ово се отвара МоноДевелоп , подразумевано развојно окружење за Унити. У суштини, Монодевелоп је уређивач текста са карактеристикама посебно оптимизованим за програмирање.

Кључне речи и коментари су истакнути у Плави и зелена , а нумеричке вредности и низови се појављују у нет . Ако сте користили Ецлипсе или других ИДЕ -ова, МоноДевелоп је врло сличан. Можете градити ваше скрипте из уређивача да бисте проверили да ли постоје синтаксичке грешке, на следећи начин:

Уопштено говорећи, да бисте омогућили да ваша скрипта ступи у интеракцију са Унити -ом, мораћете да се позовете на елементе које објекат који садржи скрипту поседује (листу ових елемената можете видети под инспектор картицу када је изабран одговарајући објекат). Затим можете позвати методе или поставити променљиве за сваки од ових елемената како бисте унели жељене промене.

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

Листа елемената које објекат може имати је следећа (преузето из прегледа инспектора једне од наших лопатица у горњем примеру):

  1. Преобразити
  2. Коцка (мрежасти филтер)
  3. Бок Цоллидер
  4. Месх Рендерер

На сваки од ових аспеката објекта може се утицати из скрипте. Затим ћемо погледати како тачно.

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

Функције трансформације за ГамеОбјецт у Унити -у контролишу физичке параметре тог објекта: његов Скала , његово положај , и његове оријентација . Можете им приступити из скрипте попут ове:

transform.position = newPositionVector3;
transform.rotation = newRotationQuaternion;
transform.localScale = newScaleVector3;

У горњим примерима, именоване променљиве су типова наведених у именима. Овде постоји неколико кључних детаља: положај и размера су, како бисте очекивали, сачувани као Вецтор3с . Можете приступити датотеци Икс , И , и ВИТХ компоненте сваког (на пример, трансформише.позиција.и даје вам растојање објекта изнад нулте равни).

Међутим, да се избегне гимбал лоцк , ротације се обрађују као Куатернионс (четворокомпонентни вектори). Будући да ручно управљање кватернионима није интуитивно, можете управљати ротацијама користећи Еулерове углове користећи Куатернион.Еулер метод овако:

transform.rotation = Quaternion.Euler(pitch, yaw, roll);

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

transform.position = Vector3.Slerp(startPositionVector3, newDestinationVector3, 1);

6.2 Рендерер

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

renderer.enabled = false;
renderer.material.color = new Color(0, 255, 0);
renderer.material.mainTexture = myTexture;
renderer.material.shader = newShader;

Већина њих има прилично јасне функције. Први пример чини предметни предмет невидљивим: користан трик у бројним ситуацијама. Други пример додељује нови РГБ боја (наиме, зелено) до предметног објекта. Трећи додељује главну дифузну текстуру новој променљивој Тектуре. Последњи пример мења схадер материјала материјала у ново дефинисану схадер променљиву.

6.3 Физика

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

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

Реквизити кинематичке физике сударају се (и стварају) реквизите некинематичке физике око њих, али на њих сами судари не утичу. Статички кинематички реквизити су пословично непокретни објекти, а покретни кинематички објекти су пословично незаустављива сила (за записник, када се сударају, једноставно пролазе један кроз други).

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

Примери:

rigidbody.angularDrag = 0.1f;
rigidbody.mass = 100;
rigidbody.isKinematic = false;
rigidbody.useGravity = true;
rigidbody.AddForce(transform.forward * 100);

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

6.4 Судар

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

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

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

void OnCollisionEnter(Collision other) {
//do things here
}

Ова метода ће се аутоматски покренути током првог кадра када други објекат додирне ваш објекат. Ентитет судара друго је референца на објекат који сте погодили. На пример, можете се позвати на њега гамеобјецт , круто тело , и преобразити карактеристике да се њиме манипулише на различите начине. Док ОнЦоллисионЕнтер је вероватно најчешћа функција коју ћете користити, можете и да је користите ОнЦоллисионЕкит и ОнЦоллисионСтаи (са иначе идентичном синтаксом и употребом), које се активирају током првог кадра када престанете да се сударите са објектом и током сваког кадра са којим се сударате.

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

RaycastHit hit;
if (Physics.Raycast(transform.position, -Vector3.up, out hit)) {
float distanceToGround = hit.distance;
}

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

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

6.5 Временска корекција

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

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

6.6 Аудио извори и слушаоци

Сада када смо се позабавили начином на који стварамо, исцртавамо и контролишемо објекте, разговарајмо о другом смислу који рачунарске игре могу послужити: наиме, звук . Унити подржава две врсте звукова: и звуци. 3Д звуци мењају јачину звука у зависности од удаљености и искривљују се док се крећу у односу на камеру; 2Д звуци не.

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

Да бисте заиста пустили звук, морате приложити аудиоизвор на реквизит (реквизит из којег желите да звук потиче, у случају 3Д звука). Тада ћете морати да отворите аудиоцлип поље и изаберите звучну датотеку.

како поправити Скипе се не може повезати

Можете користити миАудиоСоурце.Паусе () и миАудиоСоурце.Плаи () за контролу тих звучних датотека. Можете подесити понашања пада, јачину и доплерско померање звукова испод инспектор картицу за аудио извор.

6.7 Улаз

Игра која не узима ништа од корисника није баш нека игра. Постоји много различитих врста уноса које можете прочитати, а готово сви су доступни путем Улазни и Кључ код објеката. Неки примери улаза (који имају вредности процењене у сваком оквиру) су испод.

Vector3 mousePos = Input.mousePosition;
bool isLeftClicking = Input.GetMouseButton(0);
bool isPressingSpace = Input.GetKey(KeyCode.Space);

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

6.8 Отклањање грешака у скрипти

Рецимо да скрипта не ради. Као што добри доктор каже, шкриње и прекиди вам се могу догодити. Ако постоје потпуне синтаксичке грешке у вашем Ц#, игра ће генерално одбити покретање када притиснете плаи, а добићете и неке прилично корисне поруке о грешци ако градити скрипте из уређивача. Види доле:

Ове грешке обично није најтеже поправити. Оно што може бити још проблематичније су суптилне семантичке грешке у којима сте успешно написали датотеку пуну ваљаног Ц# - само не ону која ради оно што сте мислили да ће бити. Ако имате једну од ових грешака и имате проблема да је пронађете, постоји неколико ствари које можете покушати да побољшате.

Први је да паузирате извођење игре и проверите конзолу. Можете паузирати игру кликом на пауза икону у горњем средњем делу уређивача, а затим изаберите конзола са дна прозор мени (или притиском на Цтрл > Смена > Ц. ). Чак и ако нема грешака, упозорења вам могу помоћи да дате неке трагове о томе шта би могло поћи по злу.

Ако ово не успе, такође можете покушати да стекнете идеју о стању ваше скрипте штампањем стања унутрашњих променљивих да бисте потврдили да програм ради оно што мислите да ради. Можете користити Дебуг.Лог (стринг) за штампање садржаја низа на конзоли када извршење програма погоди ту линију. Уопштено говорећи, ако радите уназад од онога што мислите да би требало да се дешава кроз ствари које би то требале учинити, на крају ћете доћи до тачке у којој отисци за отклањање грешака не раде оно што очекујете да ће учинити. Ту је ваша грешка.

7. Пример: Скриптни понг

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

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

БаллХандлер.цс

Затим морамо исписати наше весло, које можете погледати испод. Весло мора да се помера горе -доле као одговор на притиске тастера (али не изван одређених граница). Такође мора покренути систем честица када се судари са нечим.

ПаддлеХандлер.цс

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

ЕнемиАИ.цс

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

СцоребоардУпдатер.цс

Са приложеним скриптама и испуњеним референцама, када покренемо игру Понг, доживљавамо играње!

Можете преузмите моју демо верзију Понг -а , ако желите да видите све што сам изнео на делу. Ради на Виндовс, Мац и Линук системима.

8. Истраживање документације / Сазнајте више

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

Кључни ресурс овде је Унити СцриптРеференце . СцриптРеференце је база података за претраживање, доступна и за Ц# и за Јавасцрипт, која има списак свих Унити наредби и функција, са описима њихових функција и кратким примерима синтаксе.

Ако имате проблема са уређивачем и интерфејсом Унити-а, или баш попут видео туторијала по жељи, постоји дуга листа висококвалитетних Унити видео водичи доступан. Опширније (али мање широко) текстуални водичи за Унити такође су доступни од ЦатЛикеЦодинг.

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

9. Изградња игре / компајлирање на самосталној апликацији

Када направите нешто на шта сте поносни (или сте завршили са клонирањем нашег помало сумњивог понг примера за вежбање), време је да своју игру преместите из уређивача и претворите у нешто што можете објавити на интернету и наметнути пријатељи и породица за игру. Да бисте то урадили, морате да направите самосталну апликацију. Добра вест је да је у Унитију ово веома, веома лако. Међутим, постоји неколико потенцијалних штуцања на које морате пазити.

За почетак, знајте да можете изградити само пројекат без грешака. У ту сврху, проверите да ли је конзола отворена током изградње: постоје неки услови грешке које ће игра занемарити у уређивачу, али ће и даље прекинути покушај изградње. Ово само шаље поруке о грешци на конзолу, без видљивих резултата на екрану, што може бити фрустрирајуће ако заборавите да проверите. Међутим, када преведете игру без грешака, можете изабрати Буилд Сеттингс под Датотека мени, или притисните Цтрл > Смена

> Б . Ово ће приказати једноставан дијалог који вам омогућава да направите игру за неколико платформи.

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

10. Завршне напомене

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

Прво унесите најважније елементе: имајте на уму своју идеју минимално одржив производ , најједноставнија и најгоља ствар коју сте могли створити, а да се и даље осјећате као да сте постигли нешто вриједно. Дођите до тог минимално одрживог пројекта пре него што пређете на веће амбиције.

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

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

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

Објави Објави Твеет Емаил 3 начина да проверите да ли је е -пошта права или лажна

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

Прочитајте следеће
Повезане теме
  • Програмирање
  • Програмирање
  • Лонгформ
  • Лонгформ Гуиде
О аутору Андре Инфанте(131 објављен чланак)

Писац и новинар са југозапада, Андре гарантује да ће остати функционалан до 50 степени Целзијуса, а водоотпоран је до дубине од дванаест стопа.

Више од Андре Инфанте

Претплатите се на наш билтен

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

Кликните овде да бисте се претплатили