Програмиране на игра с единство: Ръководство за начинаещи

Програмиране на игра с единство: Ръководство за начинаещи
Това ръководство е достъпно за изтегляне като безплатен PDF файл. Изтеглете този файл сега . Чувствайте се свободни да копирате и споделите това с приятелите и семейството си.

Изненадваща характеристика на интернет икономиката е възходът на инди видеоигрите. Някога изключителният домейн на студията с хиляди хора, многомилионни тройни А, бяха разработени редица набори от инструменти, които предоставят съвременни ресурси за разработка на игри в ръцете на отделни лица или малки, специални колекции от програмисти и дизайнери. По -рано обсъждахме най -добрите инди игри, така че не забравяйте да ги проверите за малко вдъхновение за това какво може да се постигне с инструменти като Unity.





Тези екипи за разработка на инди игри са демонстрирали пъргавина и толерантност към риска, които в много случаи им позволяват да прокарват иновациите в играта по-бързо от своите колеги с голям бюджет. През последните години премиерата на редица шокиращо успешни инди заглавия, включително Minecraft , Лимбо , и Супер месо момче , и дори да не ви трябват умения, за да правите игри като тази, можете да направите игра с помощта на Buildbox.





В бързо развиващия се пейзаж на развитието на инди игри, Единство се очерта като нещо де факто стандарт: ниската му цена, лекотата на използване и широкият набор от функции го правят идеален за бързо разработване на игри. Единството е толкова гъвкаво, че дори можете направете свои собствени персонализирани контролери за игри с малко DIY know how!





Дори големи студия като CCP (разработчици на Ева Онлайн ) използвайте го за бързо прототипиране на игрови концепции. Unity предоставя „двигател за игри в кутия“ - механизъм за физика и рендиране с куки за няколко скриптови езика, адаптивен към почти всеки жанр на видеоигри.

Докато Unity предоставя визуален редактор за манипулиране на игровата среда, Unity не е инструмент за създаване на игри с нулево програмиране. Това изисква от вас да програмирате, за да постигнете резултати, но също така ви дава много по -гъвкав и мощен инструмент, отколкото всяка програма за създаване на игри може би би могла.



Unity няма да свърши работата вместо вас, но намалява значително бариерата за влизане. Започвайки напълно от нулата с C ++ и OpenGL, може да отнеме дни, за да стигнете до точката, където всъщност има нещо изобразявано на екрана. Използвайки Unity, отнема около десет секунди. Unity предоставя основните елементи на създаването на игри в ръцете на начинаещите програмисти по бърз, интуитивен начин.

Днес ще ви водя през всичко, което трябва да знаете, за да направите игра в Unity, която е разделена на десет основни глави:





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

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





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

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

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

§6 - Скриптове в единство

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

§8 - Проучване на документацията / Научете повече

§9 - Изграждане на вашата игра / Компилиране на самостоятелно приложение

§10-Заключителни бележки

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

Unity се предлага в два основни варианта: професионалната версия и безплатната версия. Има a брой разлики , но като цяло професионалната версия поддържа редица визуални подобрения (като меки сенки в реално време и последваща обработка), както и голям брой относително незначителни функции, които са изключително полезни за по-сложни игри.

Въпреки това, за повечето сравнително прости игри, които може да искате да създадете, безплатната версия на Unity е напълно подходяща. Ще разберем по -долу основните разлики по -подробно за заинтересованите.

1.1 Ценообразуване

Безплатната версия на Unity, разбира се, е безплатна. Има обаче няколко ограничения: безплатната версия на Unity не може да бъде лицензирана за никоя компания с годишен доход над 100 000 долара . Въпреки че такива организации са извън обхвата на това ръководство, ако подозирате, че може да станете такава организация, вероятно е разумно да се възползвате от Pro версията.

Про версията на Unity е 75 долара месец, или 1500 долара за постоянен лиценз и няма ограничения за това какво можете да правите със създадените с него игри. Налична е и 30-дневна безплатна пробна версия, която ще използваме за това ръководство, за да ви дадем възможно най-пълен преглед на наличните функции. Едногодишен студентски лиценз също е достъпен чрез Проучване за 129 долара .

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

В безплатната версия на Unity липсват много функции. Най-важните разлики обаче са следните: в безплатната версия на Unity липсват редица опции за изобразяване, които дават възможност за по-добре изглеждащи, по-бързо изпълнявани игри (LOD поддръжка, последваща обработка на пространството на екрана, усъвършенствани шейдъри, софтуер в реално време сенки и отложено изобразяване). Липсва и пълното механична анимационна система , и някои инструменти за AI.

Като цяло, за сложни, мащабни проекти или проекти, където графичното представяне е важно, професионалната версия си заслужава. Използвам професионалната версия, защото разработвам игри за виртуална реалност за Oculus Rift, а поддръжката за последваща обработка на пространството на екрана е необходима за правилното взаимодействие със слушалките.

2. Инсталиране на Unity

Unity е лесен за инсталиране. Можете да изтеглите изпълнимия файл от Unity3d.com/get-unity/download .

След като го изтеглите, стартирайте го и след това следвайте инструкциите на инсталатора. Когато инсталацията приключи, ще се появи прозорец, озаглавен „активиране на вашия Unity лиценз“. Поставете отметка в квадратчето „активирайте безплатна 30-дневна пробна версия на Unity Pro“ и след това „OK“.

Честито! Вече имате 30-дневен пробен период на Unity Pro. Когато пробният период изтече, ако не искате да купувате професионалната версия, можете да преминете към безплатната версия и да запазите съществуващото си съдържание.

как да завъртите видеоклипове на Windows Media Player

3. Кратко въведение в обектно-ориентираната парадигма

Преди да започнете с Unity, важно е да разгледаме малко основите. Unity поддържа и двете ° С # и JavaScript за програмиране на игри ; ще работим с C# за този урок.

Първо, ако никога досега не сте програмирали, оставете този урок настрана и прекарайте няколко дни в работа с Microsoft C # Language Primer докато не се почувствате удобно да използвате езика за прости задачи.

Ако искате нещо малко по -различно от C# (но не непременно език, който можете да използвате в Unity), тогава разгледайте нашето ръководство за шестте най -лесни езика за програмиране за начинаещи.

Ако вече сте програмирали на императивен или обектно ориентиран език като C или Java, прегледайте грунда и се запознайте с това как C# се различава от другите езици, които сте използвали в миналото. Така или иначе, не продължавайте с урока, докато не се почувствате комфортно да решавате прости проблеми с C# (например, ако трябва да ви помоля да напишете програма, която отпечатва първите сто прости числа, трябва да можете да напишете тази програма без консултация с Google).

Най-важната концепция за разбиране тук е обектно-ориентираната парадигма (съкратено като ОТВОРЕНО ). В обектно ориентираните езици програмите са разделени на функционални единици, наречени Обекти . Всеки обект има свои собствени частни променливи и функции. Извикват се специфични за обекта функции методи .

Идеята тук е модулност: като изолирате всеки обект и принудите други обекти да взаимодействат с него чрез неговите методи, можете да намалите броя на възможните непреднамерени взаимодействия - и, като разширите, грешки. Можете също така да създавате обекти, които можете да използвате повторно по -късно, без промени. В Unity ще изграждате тези обекти и ще ги прикрепяте игрови обекти (чието поведение ще управляват).

Обектите се създават от класове : клас е просто файл, който излага дефиницията на вашия обект. Така че, ако искате a mook обект, който борави с AI за враг във вашата игра, бихте написали клас „Mook“ и след това прикрепете този файл към всеки вражески обект. Когато стартирате играта си, всеки враг ще бъде снабден с копие на обекта „Mook“.

Прикачването на нов скрипт към обект изглежда така:

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

Отидете на нов скрипт , въведете желаното име и щракнете създаване и добавяне .

Сега имате нов скрипт, който можете да редактирате, като щракнете двукратно върху него!

Файл на клас изглежда така:

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 */
}
}
}

Нека разбием това:

  • Използване на UnityEngine: Този ред казва на C#, че искаме да използваме библиотеките на Unity, които ни позволяват да се свържем с играта Unity.
  • Публичен клас Mook: MonoBehaviour: Този ред декларира класа и неговото име - mook .
  • Частно здраве на плувка: Това декларира променлива за частен клас (която може да се променя само от вътре в класа). Променливата получава стойност в Старт .
  • Отмяна на старта (): Това декларира метод, наречен Старт . Стартът е специален метод, който се изпълнява само веднъж, когато играта първоначално се стартира.
  • Актуализация на анулиране (): Актуализацията е друг специален метод, който се изпълнява на всеки кадър. Повечето от вашата логика на играта ще отидат тук.
  • // ако срещнете играча на пътя, убийте го: Този ред е коментар (всеки ред, започващ с двойна наклонена черта, се игнорира от C#). Коментарите се използват, за да си напомните какво правят конкретни битове код. В този случай този коментар се използва за замяна на по -сложен блок код, който всъщност прави това, което коментарът описва.

Заедно с Старт и Актуализиране , можете да създадете свои собствени методи с почти всяко име. Създадените от вас методи обаче няма да се изпълняват, освен ако не бъдат извикани. Нека декларираме метод за хипотетичен клас, наречен addTwoNumbers което добавя две числа заедно:

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

Това декларира публичен (достъпен за други обекти) метод, който връща float, наречен addTwoNumbers , който приема два поплавъка като вход (наричан да се и б ). След това връща сумата от двете стойности като изход.

Извикване на този метод от същия клас (да речем отвътре Актуализиране ) изглежда така:

float result = addTwoNumbers(1, 2);

Извикването на метода от друг клас е подобно:

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

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

Ако вашият скрипт е прикрепен към обект, който има специални свойства (като излъчвател на частици), който не може да бъде достъпен при нормалния набор от параметри на GameObject, можете да изберете да го третирате като различен вид игрален обект, като използвате GetComponent метод.

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

GetComponent().Play();

Ако нещо от това не ви е познато, върнете се и преминете през грунда на C#. Това ще ви спести много разочарования, докато продължим.

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

В този раздел ще преминем през основната механика на двигателя Unity. Работният процес в Unity е нещо подобно:

  1. Създайте обект, който да играе роля в играта (празно GameObjects може да се използва за абстрактни логически задачи).
  2. Напишете или намерете файл на клас и го добавете към обекта като скрипт (използвайки Добавяне на компонент бутон в инспектор изглед.
  3. Бягай > тест > отстраняване на грешки > повторете докато работи и преминете към следващия елемент на играта.

Unity идва с няколко основни раздела за изглед, които могат да бъдат подредени по различни начини според вкуса на потребителя. Големите пет са:

  1. Игра: показва текущ екземпляр на играта, с който можете да взаимодействате и да тествате.
  2. Сцена: предоставя статична, редактируема версия на света на игрите .
  3. Инспектор: ви позволява да променяте отделни обекти в света на игрите, като ги избирате в редактор раздел.
  4. Проект: ви позволява да разглеждате файловете на проекта и да плъзгате модели, материали и други ресурси в редактор раздел, за да ги поставите в света на игрите.
  5. Йерархия: този раздел показва всички обекти по света, което ви позволява да намирате отдалечени обекти в сцената и родителски обекти един към друг, като щракнете и плъзнете.

Вижте диаграмата по -долу за местоположението на всички тези неща:

4.1 Обекти на единството

4.1.1 Мрежи

Мрежите са пътят 3D геометрия е представен в Unity. Можете да използвате вградения Unity примитивен обекти (кубчета, сфери, цилиндри и т.н.), или импортирайте свои собствени 3D модели от пакет за моделиране като Блендер или Мая . Unity поддържа различни 3D формати, включително .fbx , и .3ds .

Основните инструменти за манипулиране на мрежи са бутоните за мащабиране, завъртане и превод в горния ляв ъгъл на интерфейса. Тези бутони добавят икони за управление към моделите в изгледа на редактора, които след това могат да се използват за манипулиране с тях в пространството. За да промените текстурата или физическите свойства на обект, изберете ги и използвайте инспектор изглед за анализ на материал и твърдо тяло елементи.

4.1.2 Елементи на GUI

Традиционните спрайтове с GUI и текст могат да бъдат показани с помощта на GUI Text и GUI текстура GameObjects в редактора. По -стабилен и реалистичен начин за работа с елементите на потребителския интерфейс обаче е използването на 3D текст и Quad GameObjects (с прозрачни текстури и неосветен прозрачен шейдър) за поставяне на HUD елементи в света на играта като обекти.

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

Елементите на графичния потребителски интерфейс (текст и текстури) могат да коригират своя размер и мащаб, като използват съответните полета в раздела Инспектор.

4.1.3 Материали

Материалите са комбинации от текстури и шейдъри и могат да се плъзгат директно върху игрови обекти от раздела проект. Голям брой шейдъри идват с Unity Pro и можете да регулирате текстурата, прикрепена към тях, като използвате раздела Инспектор за обект, към който са приложени.

За да импортирате текстура, я преобразувайте в .jpg , .png , или .bmp и го плъзнете в активи папка под директорията на проекта Unity (която се появява в Моите документи по подразбиране). След няколко секунди в редактора ще се появи лента за зареждане. Когато приключи, ще можете да намерите изображението като текстура под проект раздел.

4.1.5 Светлини

Светлините са GameObjects които излъчват блясък върху света. Ако във вашата сцена няма светлини, всички полигони се изчертават на едно и също ниво на яркост, придавайки на света плосък, измит вид.

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

Насоките в сценичен изглед показва максималния обхват на осветеност. Играйте с двете настройки, за да постигнете желания ефект. Можете също така да регулирате цвета на светлината, модела ( бисквитка изведена на повърхността, светлината е насочена и какъв отблясък се появява на екрана, когато гледате директно към светлината. Бисквитката може да се използва за фалшифициране на по -реалистични светлинни модели, създаване на драматични фалшиви сенки и симулиране на проектори.

Трите основни вида светлина са петно , точка , и насочени .

Точкови светлини имат местоположение в 3D пространство и проектират светлина само в една посока в конус с променлив ъгъл. Те са добри за фенерчета, прожектори и като цяло ви дават по -прецизен контрол на осветлението. Точковите светлини могат да хвърлят сенки.

Точкови светлини имат местоположение в 3D пространство и излъчват светлина равномерно във всички посоки. Точковите светлини не хвърлят сенки.

Насочени светлини накрая, се използват за симулиране на слънчева светлина: те излъчват светлина в посока, сякаш от безкрайно далеч. Насочените светлини засягат всеки обект в сцената и могат да създадат сенки.

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

ДА СЕ Система от частици е GameObject който генерира и контролира стотици или хиляди частици едновременно. Частиците са малки, оптимизирани 2D обекти, показани в 3D пространство. Системите за частици използват опростено изобразяване и физика, но могат да показват хиляди обекти в реално време без заекване, което ги прави идеални за дим, огън, дъжд, искри, магически ефекти и др.

Има много параметри, които можете да промените, за да постигнете тези ефекти, и можете да получите достъп до тях, като създадете система от частици под редактор на компоненти > избор на система от частици > отваряне на раздела инспектор . Можете да промените размера, скоростта, посоката, въртенето, цвета и текстурата на всяка частица и да зададете повечето от тези параметри да се променят също с течение на времето.

Под сблъсък атрибут, ако го активирате и зададете симулационното пространство на света ще получите частици, които ще се сблъскат с обекти по света, които могат да бъдат използвани за редица реалистични ефекти на частици, включително дъжд, движеща се вода и искри.

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

За този урок ще направим проста игра на Понг - нещо, което сме разгледали няколко пъти в DIY преди:

  • Класически понг на Arduino
  • Arduino OLED понг

В този раздел ще разгледаме подреждането на основните елементи - ръководството за скриптове ще дойде по -късно.

Първо, нека разбием играта на Pong на основните й компоненти. Първо, имаме нужда от две гребла и топка. Топката лети извън екрана, така че ще искаме механизъм за нейното нулиране. Искаме също така текстът да показва текущия резултат и, за да ви покажем всички основни елементи на Unity, ще искаме ефектен ефект на частици, когато ударите топката. Цялата игра ще трябва да бъде драматично осветена.

Това се разпада на а топка обект (сфера), а хайвер , два подложки за гребло с излъчватели на частици приложен, а Същност на 3D текст , и а точкова светлина . За този урок ще използваме физическия материал по подразбиране подскача , с отскочи комбайн настроен на умножавам . Ето как изглежда настройката в десет екранни снимки:

Първо създайте a куб опора за греблото.

Мащабирайте го по подходящ начин, дублирайте го , и поставете а сфера между лопатките за топката.

След това създайте a 3DText обект и мащаб и позиция правилно, променяйки размер на шрифта атрибут, за да получите по -малко пикселно изображение.

След това създайте две частични системи , изберете характеристиките, които искате, и ги прикрепете към лопатките.

След това ще искате позиционирайте и завъртете камерата така че да оформя сцената правилно. Докато камерата е избрана, можете да видите малка визуализация на изгледа на камерата в долния десен ъгъл.

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

Ако натиснете play, сега можете да видите изложените основни елементи на нашата игра. Те все още няма да направят нищо, но ще стигнем до това!

Сега, когато имаме тази настройка, ще говорим за това какво е включено в създаването на скриптове за тези елементи, за да се направи игра.

6. Скриптове в Unity

След като имате скрипт, прикрепен към обект, можете да го преработите, като щракнете двукратно върху него в инспектор . Това се отваря MonoDevelop , средата за разработка по подразбиране за Unity. По същество Monodevelop е текстов редактор с функции, специално оптимизирани за програмиране.

Ключовите думи и коментарите са подчертани в син и зелено , а числовите стойности и низовете се появяват в мрежа . Ако сте използвали Затъмнение или други IDE, MonoDevelop е много подобен. Можеш изграждане вашите скриптове от вътрешността на редактора, за да проверите за синтаксични грешки, например:

Като цяло, за да накарате вашия скрипт да взаимодейства с Unity, ще трябва да посочите елементи, които притежава обектът, съдържащ скрипта (можете да видите списък с тези елементи в инспектор раздел, когато е избран съответният обект). След това можете да извикате методи или да зададете променливи за всеки от тези елементи, за да въведете промените, които искате.

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

Списък на елементите, които обектът може да има, е следният (взет от изгледа на инспектора на едно от нашите гребла в горния пример):

  1. Трансформирайте
  2. Куб (мрежест филтър)
  3. Box Collider
  4. Mesh Renderer

Всеки от тези аспекти на обекта може да бъде повлиян от скрипта. След това ще разгледаме как точно.

6.1 Трансформиране

Функциите за трансформиране на GameObject в Unity контролират физическите параметри на този обект: неговите мащаб , неговото позиция , и е ориентация . Можете да получите достъп до тях от скрипт като този:

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

В горните примери, наименуваните променливи са от типовете, посочени в имената. Тук има няколко ключови подробности: позицията и мащабът, както бихте очаквали, се съхраняват като Vector3s . Можете да получите достъп до х , И , и С компоненти на всеки (например transform.position.y дава разстоянието на обект над нулевата равнина).

За да се избегне обаче заключване на кардан , завъртанията се обработват като Кватерниони (четирикомпонентни вектори). Тъй като ръчните манипулации на кватерниони са неинтуитивни, можете да манипулирате завъртанията, използвайки ойлеровите ъгли, като използвате Quaternion.Euler метод по следния начин:

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

Ако искате да премествате обекти плавно от едно място на друго, ще намерите Slerp методът за кватерниони и vector3s е полезен. Slerp приема три аргумента - текущото състояние, крайното състояние и скоростта на промяна и плавно интерполира между тях при дадената скорост. Синтаксисът изглежда така:

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

6.2 Renderer

Функциите за визуализация в Unity ви позволяват да контролирате начина, по който повърхностите на реквизитите се изобразяват на екрана. Можете да преназначите текстурата, да промените цвета и да промените шейдъра и видимостта на обекта. Синтаксисът изглежда така:

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

Повечето от тях имат доста ясни функции. Първият пример прави въпросния обект невидим: полезен трик в редица ситуации. Вторият пример присвоява нов RGB цвят (а именно, зелено) към въпросния обект. Третият присвоява основната дифузна текстура на нова текстурна променлива. Последният пример променя шейдъра на материала на обекта в новодефинирана променлива на шейдъра.

6.3 Физика

Unity идва с интегриран физически двигател - нещо, което всички игри с физически пясък използват. Това ви позволява да задавате физическите свойства на обектите и да оставяте подробности за тяхната симулация да се обработват вместо вас. Като цяло, вместо да се опитвате да внедрите собствената си физика с помощта на учебник и системата за трансформиране, е по -просто и по -стабилно да използвате физическия двигател на Unity във възможно най -голяма степен.

Всички физически реквизити изискват колайдери . Самата действителна симулация обаче се управлява от a твърдо тяло , които могат да бъдат добавени в инспектор изглед. Твърдите тела могат да бъдат кинематичен или некинематичен .

Реквизитите на кинематичната физика се сблъскват с (и въздействат) на некинематичните физически реквизити около тях, но не се влияят от самите сблъсъци. Статичните кинематични подпори са пословичните неподвижни обекти, а движещите се кинематични обекти са пословичната неудържима сила (за запис, когато се сблъскат, те просто преминават един през друг).

Освен това можете да регулирате ъгловото плъзгане на обекта (колко енергия е необходимо, за да го завъртите), да промените масата му, да диктувате дали той е повлиян от гравитацията или не и да приложите сили към него.

Примери:

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

Всичко това е доста обяснително. Единственото нещо, което трябва да се отбележи тук, е използването на преобразуване.напред . Всички Vector3 имат три компонента ( .напред , .горе , и .право ), свързани с тях, които могат да бъдат достъпни и да се въртят с тях ( напред е посоката на синята стрелка в редактора). The преобразуване.напред ключовата дума е просто пренасочващия вектор за текущия обект с величина 1. Тя може да бъде умножена по поплавък, за да се създаде повече сила върху обекта. Можете също така да се позовавате преобразуване и трансформирайте , и да ги отрече, за да получат своите обрати.

6.4 Сблъсък

Често, когато изграждате игра, бихте искали сблъсъкът да доведе до някаква промяна в състоянието във вашия код, извън просто симулация на физика. За това ще ви трябва метод за откриване на сблъсък .

Необходимо е известно количество подготвителна работа за откриване на сблъсъци в Unity. Първо, поне един от обектите при сблъсъка се нуждае от a некинематично твърдо тяло прикрепен към него. И двата обекта трябва да имат правилни колайдери, зададени да не се задействат. Общата скорост на двата обекта трябва да е достатъчно ниска, за да се сблъскат, вместо просто да прескачат един през друг.

Ако сте се погрижили за всичко, можете да проверите за сблъсък, като поставите специален метод за откриване на сблъсък в скрипт, прикрепен към обекта, с който искате да проверите сблъсъка. Методът ще изглежда така:

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

Този метод ще се стартира автоматично по време на първия кадър, когато друг обект докосне вашия обект. Същността на сблъсъка други е препратка към обекта, който сте ударили. Можете например да се позовавате на него gameobject , твърдо тяло , и трансформирайте характеристики за манипулиране по различни начини. Докато OnCollisionEnter е може би най -често срещаната функция, която ще използвате, можете също да използвате OnCollisionExit и OnCollisionStay (с иначе идентичен синтаксис и използване), които се активират по време на първия кадър, в който спрете да се сблъсквате с обект, и по време на всеки кадър, който се сблъсквате съответно с обект.

Понякога може да бъде полезно да правите това, което се нарича излъчване на лъчи . При излъчването на лъчи, безкрайно тънка линия (a лъч ) се прехвърля през света от някакъв произход, по някакъв вектор и, когато удари нещо, се връща позицията и други подробности за първия сблъсък. Кодът за Raycast изглежда така:

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

Това хвърля лъч от позицията на текущия обект по -Vector3.up (направо надолу) и свързва променливата хит до първия обект, с който се сблъсква. След като лъчът ви е ударил нещо, можете да получите достъп hit.distance за да се определи колко далеч е, или hit.GameObject да манипулирате ударения обект.

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

6.5 Корекция на времето

Един важен фактор, който трябва да имате предвид, когато манипулирате обекти по този начин, е свързан честота на кадрите . Без значение колко внимателно оптимизирате, честотата на кадрите винаги ще варира и не искате скоростта на играта да се променя съответно. Ако някой друг изпълнява играта ви на по -бърз компютър, отколкото сте я разработили, не искате играта да работи с двойна скорост.

Начинът, по който коригирате това, е като умножите стойностите, които използвате, по времето, необходимо за изобразяване на последния кадър. Това става чрез използване Time.deltaTime . Това ефективно променя скоростта на всяка променлива, от която увеличавате всеки кадър промяна на кадър да се промяна в секунда , и вероятно трябва да направите тази промяна на всяка стойност, която увеличавате или намалявате всеки кадър.

6.6 Аудиоизточници и слушатели

Сега, когато разгледахме как да създаваме, визуализираме и контролираме обекти, нека поговорим за другия смисъл, на който могат да служат компютърните игри: а именно, звук . Unity поддържа два вида звуци: 2D и 3D звуци. 3D звуците променят силата си в зависимост от разстоянието и се изкривяват, докато се движат спрямо камерата; 2D звуците не го правят.

2D звуците са подходящи за гласови кадри и фонова музика, а 3D звуците се прилагат за звуци, генерирани от събития по света. За да промените дали звукът е 3D, изберете го в проект изглед, превключете към инспектор преглед и изберете подходящата опция от падащото меню, след което натиснете повторно импортиране бутон.

За да възпроизведете звука, трябва да прикачите аудиоизточник към реквизит (реквизит, от който искате да произхожда звукът, в случай на 3D звук). След това ще трябва да отворите аудиоклип поле и изберете вашия звуков файл.

скоростта на ниво кеш памет се влияе от ________.

Можеш да използваш myAudioSource.Pause () и myAudioSource.Play () за управление на тези звукови файлове. Можете да регулирате поведението на падане, силата на звука и доплеровото изместване на звуците под инспектор раздел за аудиоизточника.

6.7 Вход

Игра, която не взема никакви данни от потребителя, не е много игра. Има много различни видове въвеждане, в които можете да прочетете, и почти всички от тях са достъпни чрез Вход и KeyCode обекти. Някои примерни изявления за въвеждане (които имат стойности, оценени във всеки кадър) са по -долу.

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

Функциите на тези редове са обясними най -вече. Използвайки тези три вида справочни данни за вход, можете да реконструирате схемите за управление на повечето съвременни 3D компютърни игри.

6.8 Отстраняване на грешки в скрипт

Да кажем, че скриптът не работи. Както казва добрият лекар, може да ви се случат удари и прекъсвания. Ако с вашия C#има откровени синтаксични грешки, играта обикновено ще откаже да се изпълнява, когато натиснете play, и се предоставят някои доста полезни съобщения за грешка, ако изграждане скриптовете от редактора. Виж отдолу:

Тези грешки обикновено не са най -трудните за поправяне. Това, което може да бъде по -проблематично, са фините семантични грешки, при които успешно сте написали файл, пълен с валиден C# - просто не такъв, който прави това, което смятате, че би било. Ако имате една от тези грешки и имате проблеми с проследяването й, има няколко неща, които можете да опитате да подобрите ситуацията.

Първият е да спрете изпълнението на играта и да проверите конзолата. Можете да спрете играта, като щракнете върху пауза икона в горната средна част на редактора и след това изберете конзола от дъното на прозорец меню (или натискане Ctrl > Преместване > ° С ). Дори и да няма грешки, предупрежденията все още могат да помогнат да се дадат някои улики за това какво може да се обърка.

Ако това не работи, можете също да опитате да получите представа за състоянието на вашия скрипт, като отпечатате състоянието на вътрешните променливи, за да потвърдите, че програмата прави това, което смятате, че прави. Можеш да използваш Debug.Log (низ) за да отпечатате съдържанието на низ в конзолата, когато изпълнението на програмата достигне този ред. Като цяло, ако работите назад от това, което смятате, че трябва да се случва, чрез нещата, които би трябвало да го направят, в крайна сметка ще стигнете до точка, в която вашите отпечатъци за отстраняване на грешки не правят това, което очаквате. Ето къде е вашата грешка.

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

За да изградим Pong, нека разделим играта на основните й елементи: имаме нужда от топка, която рикошира напред -назад между лопатките с нарастваща скорост, имаме нужда от табло, което знае кога топките са преминали през греблата и имаме нужда от механизъм за рестартиране на топката, когато това се случи. Добра първа стъпка би била да добавите некинематично твърдо тяло към топката, две кинематични твърди тела към лопатките, да деактивирате гравитацията за всички тях и да присвоите подходящ физически материал от стандартните активи ( подскача с отскочи комбайн настроен на умножавам ).

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

BallHandler.cs

След това трябва да скриптираме нашето гребло, което можете да видите по -долу. Лопатката трябва да се движи нагоре и надолу в отговор на натискане на клавиши (но не извън определени граници). Също така трябва да задейства системата от частици, когато се сблъска с нещо.

PaddleHandler.cs

След това се нуждаем от вражески ИИ: нещо, което ще накара вражеското гребло да проследи към топката с фиксирана скорост. За това ще използваме Vector3.Slerp за максимална простота. Бихме искали също същото поведение на частиците, което виждаме на собственото си гребло.

EnemyAI.cs

И накрая, имаме нужда от скрипт за актуализиране на таблото и нулиране на топката, когато тя излезе извън границите.

ScoreboardUpdater.cs

С прикрепените скриптове и попълнените референции, когато стартираме нашата игра на Pong, изпитваме геймплей!

Можеш изтеглете моята демо версия на Pong , ако искате да видите всичко, което очертах в действие. Той работи на Windows, Mac и Linux системи.

8. Проучване на документацията / Научете повече

Unity е сложен двигател с много повече функции, отколкото би могло да бъде описано в ръководство за този стил, и това е преди да включите обширната част от (безплатни и търговски) разширения Unity, достъпни в интернет. Това ръководство ще ви даде силно начално място за разработване на игра, но самообразованието е важно умение във всяко начинание, и тук двойно.

Важен ресурс тук е Unity ScriptReference . ScriptReference е база данни за търсене, достъпна както за C#, така и за Javascript, която има списък с всяка команда и функция на Unity, с описания на техните функции и кратки примери за синтаксис.

Ако имате проблеми с редактора и интерфейса на Unity или просто като видео уроци по предпочитание, има дълъг списък с висококачествени Видео уроци за Unity на разположение. По -обширно (но по -малко широко) текстови уроци за Unity са достъпни и от CatLikeCoding.

И накрая, ако имате въпроси извън обхвата на документацията или уроците, можете да зададете конкретни въпроси на адрес answer.Unity3d.com . Не забравяйте, че отговорите се предоставят от доброволци, така че уважавайте тяхното време и първо потърсете в базата данни, за да се уверите, че на въпроса ви още не е отговорено.

9. Изграждане на вашата игра / Компилиране на самостоятелно приложение

Когато сте изградили нещо, с което се гордеете (или сте приключили с клонирането на нашия леко хитър пример за понг), е време да преместите играта си от редактора и да я превърнете в нещо, което можете да публикувате в интернет и да принудите приятелите и семейството ви да играят. За да направите това, ще трябва да създадете самостоятелно приложение. Добрата новина е, че в Unity това е много, много лесно. Има обаче няколко потенциални хълцания, с които ще искате да внимавате.

Като начало знайте, че можете да изградите само проект без грешки. За тази цел се уверете, че конзолата е отворена, докато изграждате: има някои условия за грешка, които играта ще игнорира в редактора, но все пак ще прекъсне опит за изграждане. Това само изхвърля съобщения за грешки в конзолата, без видими резултати на екрана, което може да бъде разочароващо, ако забравите да проверите. След като играта ви се компилира без грешки, можете да изберете Настройки за изграждане под Файл меню или натиснете Ctrl > Преместване

> Б . Това ще изведе прост диалог, който ви позволява да изградите играта си за няколко платформи.

Процесът оттам е обясним: изберете опциите си и натиснете изграждане ; играта ще ви подкани за директория, в която да инсталирате, и ще постави както изпълнимия файл, така и директорията с данни там. Тези два файла могат да бъдат компресирани заедно и разпространявани (просто се уверете, че не таксувате за игра, вградена в демото на Unity, тъй като това нарушава условията на услугата).

10. Заключителни бележки

Както при всеки инструмент за разработка на игри, ключът към успеха с Unity е итеративното развитие. Трябва да надграждате управляеми стъпки - бъдете амбициозни по всякакъв начин, но бъдете амбициозни на малки парчета и подредете тези парчета така, че дори да не успеете да постигнете крайната си амбиция, поне ще завършите с една последователна продукт.

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

Този урок ви дава силно начално място, но най -добрият начин да научите Unity е чрез изграждане на игра. Започнете да изграждате игра, запълнете празнините в знанията си, когато се появят, и постепенният поток от знания ще ерозира нещата, които не знаете изненадващо бързо.

Ако сте прочели всичко това и сте малко затрупани от кодирането, необходимо за Unity, не забравяйте да проверите как да научете разработването на игри с Unity Learn и също така прочетете нашето ръководство за това как да правите видео игри без никакво програмиране.

Unity е мощен инструмент и с малко проучване можете да изграждате впечатляващи проекти с него по -бързо, отколкото бихте очаквали. Кажете ни какво сте изградили в коментарите по -долу - бихме искали да видим!

Дял Дял Туит електронна поща 3 начина да проверите дали имейл е реален или фалшив

Ако сте получили имейл, който изглежда малко съмнителен, винаги е най -добре да проверите неговата автентичност. Ето три начина да разберете дали имейл е реален.

Прочетете Напред
Свързани теми
  • Програмиране
  • Програмиране
  • Дълга форма
  • Ръководство за дълги форми
За автора Андре Инфант(131 публикувани статии)

Писател и журналист, базиран в югозападната част, Андре гарантирано ще остане функционален до 50 градуса по Целзий и е водоустойчив до дълбочина дванадесет фута.

Още от Andre Infante

Абонирайте се за нашия бюлетин

Присъединете се към нашия бюлетин за технически съвети, рецензии, безплатни електронни книги и изключителни оферти!

Щракнете тук, за да се абонирате