Разработка на 2D игрина Unity (3

разработка

Здравей peekaboo! Виждам, че тази серия не се оказа много интересна, но наличието на абонати, от които вече има 50 души, ме задължава да довърша започнатото =) Извинявам се за дългото отсъствие. работа. Трябва да пиша през нощта.

Внимание! Много дълъг пост!

В тази публикация ще говорим за скриптове в Unity. Веднага ще обърна внимание на три точки: 1 - Ще кодираме на C#. Unity все още поддържа JS, но няма да го докосваме. 2 - За експерти. Моят код не е съвършен и не е истината от последна инстанция. Особено в този сериал. Защото тук целта е да ви запознаем с основите, а не да издадем качествена игра 3 - Ще публикувам кода на самото приложение със снимки. По две причини: подчертаване на синтаксиса и за тях да не копират-поставят. Пишете с химикалки, ще се запомни по-добре.

Така. Да започваме. Нека незабавно създадем два скрипта в папката Scripts, която вече създадохме. За да направите това, натиснете десния бутон на мишката и изберете Create -> C# скрипт.

unity

Нека ги наречем Игра и Яйце, тъй като те ще отговарят за основната логика на играта и съответно за обектите яйца. Създаден? Страхотен! За да работят скриптовете, те трябва да бъдат поставени върху някои обекти в сцената. Нека създадем нов обект за игра и да го наречем Zero. Как да направите това, вече писах, но ето анимацията:

игрина

Сега нека поставим скрипта Game върху обекта MainCamera и скрипта Egg върху обекта Zero. Това може да стане по три начина: чрез плъзгане на скрипта върху обекта в йерархичния прозорец, чрез плъзгане на скрипта към компонентите на обекта в прозореца на инспектора или чрез щракване върху бутона Добавяне на компонент в инспектора.

unity

игрина

Както можете да видите, Unity създаде скрипта не празен. Тя зареди две стандартни библиотеки в него(редове 1 и 2) и също създаде публичен клас (ред 4) със същото име като името на самия скрипт, наследявайки го от базовия клас MonoBehavior. За да спестя дължината на публикацията, няма да ви казвам защо са необходими библиотеки и базов клас. Но си струва да разгледаме две стандартни функции, които Unity също създаде за нас.

Функция Start(ред 7) - извиква се веднъж, при зареждане на скрипта.

ФункцияUpdate(ред 12) - извиква се всеки път, преди рамката да бъде актуализирана.

Както може би се досещате - честотата на кадрите в играта ще зависи пряко от броя на изчисленията, извършени във функцията Update. Следователно в тази функция си струва да избягвате такива сложни изчисления като например търсене на обекти на сцената. За щастие, Unity ви позволява да присвоявате „препратки“ към обекти – към променливи. И това присвояване трябва да се направи в стартовата функция и след това да се използва само създадената променлива.

Нека създадем няколко променливи и да видим за какво служат.

сцената

Така. На седмия ред имаме променлива тип GameObject с име zero. Той ще съдържа празен обект на игра от сцената. Което би означавало "същността" на яйцето. Тоест, създавайки дубликат на този обект на сцената, ще имаме предвид, че на сцената се е появило ново яйце, което ще се управлява от скрипта Egg. Всъщност нямаме нужда от тази променлива и можем просто да създадем нов празен обект. Но считам за необходимо да покажа с пример как се създава копие на обект на сцената.

Променливият тип GameObjectви позволява да съхранявате препратка към всеки игрови обект, разположен на сцената. От него можете да получите достъп до всеки компонент, прикачен към този обект, или да извършвате операции върху самия обект.

10 до 13линия съхраняваме игрови обекти със спрайтове на позициите на нашия играч.

На ред 15 съхраняваме цифровото обозначение на позицията на играча.

Тип променливаintозначаваinteger, т.е. цяло число. Unity също така разбира всички стандартни типове данни от C# (и други езици) - това еfloat, т.е. числа с плаваща запетая,string, т.е. низова променлива, иbool- булева променлива, която съхранява едно от двете състояния: true или false.

Първо, това е типътTransform, който съхранява информация от компонента Transform, тоест всичко, свързано с позицията на обекта в пространството на играта. А променливата transform ви позволява да търсите в дъщерни обекти. Ние ще използваме този имот.

сцената

Страхотен! Сега нашият скрипт знае кои обекти са отговорни за позицията на играча и също така знае къде се намира празният ни обект. Но трябва да направим най-важното - да посочим позициите на всички яйца на сцената. Но почакай! тях. 40 o_O И да, първо, просто е твърде мързеливо да ги присвоявате ръчно. Второ, може внезапно да поискаме да заменим някой от обектите и тогава ще трябва да го присвоим отново в инспектора. Нека автоматизираме този процес. Да започнем с инициализацията:

игрина

За целта пристъпваме към писане на функцията Start. Ние ще съхраняваме яйцата не като отделни обекти, а като цели масиви. Това ще улесни контакта с тях. И за удобство при попълването на тези масиви създадохме променливатаegg. Той ще съответства на трансформиращия компонент, един от хайвера, разположен на сцената. За да намерим този спаун, използваме функциятаFindи посочваме името на обекта, който търсим в скоби. Всичко това е описано в 59-ия ред.

След това трябва да декларирамемасив, указвайки неговия размер (ред 61).

И след това - запълваме масива с помощта на цикъл (ред 63).

В свойствата на цикълапосочваме, че се нуждаем от временна променлива i, която ще показва номера на „кръга“, през който минава цикълът. Ще повтаряме кръговете, докато тази наша променлива стане по-малка от броя на дъщерните обекти в нашия спаун. И на всеки кръг ще увеличим тази променлива с единица.

В тялото на цикълаприсвояваме на клетката на масива, съответстваща на номера на кръга, обекта на играта, който търсим сред дъщерните обекти на нашата временна променлива. Търсенето се извършва от функцията FindChild. И в скоби трябва да посочим името на обекта, който търсим. Името ни отговаря на номера на кръга. И тъй като нашият кръгов номер е цяло число, ние го преобразуваме в низ с помощта на функцията "ToString()".

Първият масив е пълен. Правим същото за останалите хайвери.

След това трябва да скрием вълка в сцената. Ще започнем да го показваме едва след стартирането на играта. За да направим това, ние просто деактивираме обекта на играта на сцената, като преместим флага във функцията SetActive на false. Правим същото за всички спрайтове на вълци (страници 81-84).

Освен това трябва да скрием всички яйца от сцената. Тук отново не можете без цикъл.

Просто преминаваме през всички масиви и изключваме обектите яйца с функцията, която вече познаваме. Това действие се извършва от 87-ия до 90-ия ред на кода.

С това ще завърша публикацията. Можете да започнете играта и да видите дали яйцата изчезват от сцената.Внимание.За да работи скриптът правилно, яйцата във всеки от хайверите трябва да бъдат именувани от 0 до 9. Цяло число. Започвайки от нулата. Не, не от един.

Благодарим ви, че четете и се абонирайте, за да не пропуснете следващите публикации! ;)