Керівництво до Car Tutorial (Unity3d) частина 1 з 3

Це перекладене керівництво для проекту посилання
Окреме спасибі команді Zionn Game Room за переклад офіційних і не офіційних відеоуроків по Unity3d на російську мову. І так, приступимо до вивчення нашого керівництва.

Введення
Мета цього посібника є показати вам, як створити гоночну гру в Unity3d. Ми створимо автомобіль з 3D-моделей, скриптів і компонентів. Ми надаємо вам повноцінний проект гоночного симулятора, де ви можете грати і вивчати готові сцени. Ми також надамо вам сцену яка повністю готова для гри, крім автомобіля над яким ви можете потренуватися з допомогою цього керівництва.

Що ми вивчимо?
Почнемо з того про що це керівництво. Воно розділене на три частини, які незалежні один від одного:

1. Збірка автомобіля
Як зібратиавтомобільний префаб (Car Prefab) з 3D-моделі, скриптів і компонентів. Це поточний розділ.

2. Тонка настройка автомобіля
Як правильно налаштувати автомобіль

3. Під капотом
Більш глибокий погляд на вихідний код, який приводить у рух автомобіль.

Необхідні умови
Керівництво не призначене для початківців в якості навчання Unity3d . Ви повинні мати базові розуміння як Unity3d організований, ви повинні знати, що таке Ігровий об'єкт (GameObject), Компоненти (Components), Скрипти (Scripts) і т. д. Ми разом розберемо багато матеріалу, деякі речі розберемо базово, деякі поглиблено.

Ми не будемо вивчати:
• Інші скрипти.
• Основи Unity3d. Ми не будемо вдаватися в подробиці з поясненням основ роботи скриптів і компонентів Unity3d. Для цього є багато інших ресурсів за адресами:
посилання №1
посилання №2

Керівництво користувача і скриптів Unity3d цінні супутники при вивченні цього керівництва. Ми пропонуємо вам відвідати ці ресурси, коли ви стикаєтеся з вбудованими компонентами або функціями, про яких ви хотіли б дізнатися більше.

Підхід до вивчення є аналогом «Мавпи бачить, мавпи повторює»: ви прямуєте інструкціям, які ми даємо про створення автомобіля і зміну його змінних.

Сподіваюся, ви зрозумієте, як воно працює всі разом і самі почнете розбиратися в цьому. Не соромтеся вивчати.

В останній і самій довгій частині глибше ми занурюємося у вихідний код, який змушує автомобіль їздити.

Це не лінійний покрокове керівництво, але ми будемо розглядати більшу частину того, що відбувається.

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

Частина 1: Збірка автомобіля

Скачайте архів з папкою проекту. Почніть з відкриття сцени з ім'ям 'CompleteScene'. Ця сцена має налаштований автомобіль, ви можете спробувати пограти натиснувши кнопку відтворення (Play). Це продемонструє вам кінцевий результат того, що ми збираємося зробити.

image

Коли ви закінчите грати, відкрийте сцену під назвою 'TheTrack'. Ця сцена містить все, що потрібно для гоночного симулятора, за винятком найбільш важливої частини — автомобіля.

Тепер перетягніть модель автомобіля в сцену. У вікні проекту (Project view) ви знаходимо його в Models/Car/catamount.

В залежності від того, куди ви перетягнули автомобіль, ймовірно, ви захочете змінити його позицію на більш відповідну.
Я вважаю, що ви зміните позицію автомобіля у інспектора (inspector) (860, 102.3, 878) і встановіть його Y-обертання (Rotate) 130.

Для іншої частини керівництва, цей ігровий об'єкт буде називатися «Car», так що ви можете перейменувати його зараз.


image

Це просто 3D-модель автомобіля. Якщо ви подивитеся на інспектор, ви побачите, що вона містить безліч дочірніх об'єктів, такі як «тіло» автомобіля, вікна автомобіля і колеса. Вона також містить дві прості сітки, які ми будемо використовувати для коллайдерів (colliders) автомобіля. Не хвилюйтеся вони зараз не видно, ми змінимо це. Витратьте деякий час на вивчення того, як влаштований автомобіль і як вони пов'язані один з одним у ієрархії (hierarchy).

По ряду причин, ми для автомобіля створили свій шар. З ігровим об'єктом 'Car' розібралися, перейдіть у інспектор виберіть «Car» в шарах випадаючого меню. В контекстному меню, натисніть«Так, змінити дочірній об'єкт (Yes, change children)», щоб застосувати зміни застосовуються до всіх об'єктів в ієрархії автомобіля.

У ігрового об'єкта «Car» є компонент анімації, який встановлюється за замовчуванням. Оскільки це не те, що ми збираємося використовувати, підемо далі і трохи подчистим, натиснувши на маленьке колесо праворуч компонента анімації (Animation Component) і виберіть «Remove Component (Видалити компонент)».

Додавання зіткнення (Collision)
image

Тепер ми налаштуємо компоненти зіткнення (Collision) для автомобіля, запобігши його від падіння за сцену, коли сцена активна. Замість того щоб використовувати складні сітки як коллайдерів (colliders) на основі цієї сітки машини, ми створили дві сітки, що набагато простіше, які відповідають верхній і нижній частині автомобіля. Для підвищення продуктивності ми використовуємо ці сітки в якості моделі зіткнень.

• Натисніть на ігровий об'єкт Collider_Bottom, який знаходиться як дочірній об'єкт, об'єкта 'Car' (автомобіль).
• Перейдіть у меню Component/Physics і натисніть MeshCollider додавши до об'єкту гри.
• Натисніть Material у випадаючому селекторі на знову доданому компоненті MeshCollider і виберіть physics material.
• Перевірте, що б стояли галочки на двох квадратах (checkbox) 'Smooth Sphere Collisions' та 'Convex'
• Так як колайдери будуть невидимими, видалите MeshRenderer та MeshFilter компоненти з ігрового об'єкта (Натисніть на маленьке зубчасте колесо праворуч компонентів і виберіть пункт «Видалити компонент» ('Remove Component').
• Зробіть те ж саме що описано вище для ігрового об'єкта Collider_Top.

Налаштування тіні для конкретної моделі автомобіля

Ми збираємося змінити налаштування тіней для моделі автомобіля «Car» з двох причин. Насамперед відключення тіней об'єкти, які насправді не потребують в ній дуже хороша практика для підвищення продуктивності. По-друге, ми вважаємо, що автомобіль буде виглядати краще коли налаштуємо тіні. Це може бути більш приємним для очей, коли тіні з'являються і зникають на автомобілі, під час його руху з великою швидкістю по сцені. Якщо ви хочете більш реалістичне поведінка тіней, це цілком можливо. Просто змініть налаштування у відповідності з вашими бажаннями.

Налаштування, які ми використовуємо для різних частин автомобіля є наступні:

Терміни:
enabled — включено
disabled — вимкнено
Cast Shadows — отбрасывающие тіні.
Receive Shadows — отримані тіні.
Body — корпус автомобіля
Body Interior — корпус салону
Car Windows — Вікна автомобіля.
DiscBrakes — Дискові гальма
Wheels — Колеса.
Body: Cast Shadows enabled. Receive Shadows disabled.
Body Interior: Cast Shadows enabled. Receive Shadows disabled.
Car Windows: Cast and Receive Shadows disabled
DiscBrakes: Cast and Receive Shadows disabled
Wheels: Cast Shadows enabled. Receive shadows disabled.

Додавання компонентів автомобіля
Тепер давайте почнемо додавати компоненти, необхідні для правильної роботи автомобіля (ігрового об'єкта 'Car')
image
Перш за все, нам потрібен спосіб контролювати положення автомобіля в світі з допомогою фізичної симуляції, і вбудований в компонент Rigidbody ідеально підходить для цього. Виберіть ігровий об'єкт «Car», перейдіть в меню Components і виберіть Physics/RigidBody. Підтвердіть лист Unity3d, що повідомляє вам про втрату prefabз'єднань і спостерігаємо, як ігровий об'єкт тепер має Rigidbody компонент прикріплений в якості одного з його компонентів.

• Автомобіль очевидно важить більше, ніж просто один кілограм, так що почнемо з зміни маси (Mass) Rigidbody на щось більш реалістичне, припустимо 1500кг.
• Далі ми маємо можливість змінити angularDrag властивість, це сили, які уповільнюють швидкість обертання Rigidbody. Ми будемо контролювати опір автомобіля за допомогою скриптів, так що просто встановіть властивість angularDrag в 0.
• Знайдіть скрипт Car.js в папці 'scripts/Javascript' і перетягніть його на ігровий об'єкт «Car». Цей скрипт є «двигуном» автомобіля, на пояснення скрипта ми зосередимося більш докладно в кінці цього посібника.

Компонент-скрипт «Car.js» має багато різних змінних, які будуть пояснюватися, коли ми почнемо налаштування автомобіля, ще більш детально ми розповімо коли будемо вивчати код. Зараз ми просто хочемо налаштувати те що треба, щоб мати можливість керувати автомобілем на трасі.
image

Насамперед, скрипт «Car» повинен знати про колеса, що має автомобіль. В інспекторі ви побачите передні колеса (Front Wheels) та задні колеса (Rear Wheels), зверніть увагу, що обидва вони можуть бути розширені шляхом натискання на маленьку стрілку ліворуч від імені.

• Встановіть розмір (size) передніх (Front) і задніх коліс (Rear Wheels) на 2, залишаючи місце для двох передніх коліс і двох задніх коліс.
• Тепер розкрийте WheelFL, WheelFR, WheelRL і WheelRR інспектора. Ви побачите, що кожен з них має гальмівний диск (DiscBrake) в якості дочірнього об'єкту, і те, що кожен гальмівний диск (DiscBrake) має колесо в якості дочірнього об'єкта.
• Перетягніть DiscBrakeFL і DiscBrakeFR у два відкритих слота під (Front Wheels) передні колеса в скрипті «Car» , а такожDiscBrakeRL і DiscBrakeRR до слотів під(Rear Wheels) задні колеса.
• Ви можете запитати — навіщо дискові гальма коліс? І пояснення просте: Дискові гальма в якості батьківських ігрових об'єктів, тому установка дисків як коліс будуть включати шини.

Додавання blob тіней
image

Направлене світло зробить у автомобіля хорошу blob тінь на дорозі, якщо тіні дозволені у вашому проекті. Ми також хочемо, додати тінь під машину, як показано на зображенні.
Для цього ми будемо використовувати проектор, який проектує Blob тінь, що нагадує форму автомобіля на дорозі безпосередньо під машиною. Проектор вбудований компонент, який працює так само, як справжній проектор. Ви вказуєте текстуру, яку хочете передавати, і на основі налаштувань для проектора і (відстані до цілі), тінь буде спиратися на ті текстури об'єктів, які знаходяться на шляху світла проектора.

• В ієрархії, створіть порожній ігровий об'єкт і перетягніть його на автомобіль «Car», щоб зробити його дочірнім об'єктом, ігрового об'єкта «Car».
• Задайте ім'я об'єкту «Blob shadow projector»
• Додати компонент (Projector) проектора Blob тінь цього проектора (Component->Renderer->Projector)
• Встановіть на проекторах налаштування Near Clip Plane = 0,1, Far Clip Plane = 50, Field of View = 30.
• Призначте матеріал Blob_shadow для слота матеріалу.
• У «Ignore Layers» виберіть «Everything», а потім зніміть прапорець з шару «Road», в результаті чого проектор відкине Blob тінь на дорогу.
• Додайте скрипт BlobShadowController.js (в папці Scripts/CSharpScripts у вікні проекту)

Положення і обертання компонента (Projector) проектора оновлюється кожен кадр у BlobShadowController.js скрипті який є досить простим. Коротше кажучи, він знаходиться в 10 метрах над автомобілем і отримує його координати обертання на основі обертання машини. Ви можете поглянути на скрипт і спробувати змінити значення, якщо ви хочете що б Blob тінь автомобіля на дорозі виглядала інакше.

Сліди від шин
image
Деякі з речей, які роблять процес водіння автомобіля ще більш захоплюючим, це замети автомобіля навколо кута траси або робити розворот на високій швидкості. Для посилення ефекту коліс ковзних по дорозі, ми збираємося додати деякі сліди шин на поверхні, коли автомобіль ковзає.

Так ми встановимо сліди шин, якщо додамо наявний скрипт, який контролює всі сліди шин на сцені. Цей контролер відповідає за створення сітки, яка представляє сліди шин. Кожне колесо знає свою позицію і буде ковзання чи ні. Ми використовуємо цю інформацію, щоб зареєструвати точку в світі, де ми хочемо встановити відмітку заносу (skidmark) по відношенню до контролера skidmark. Ми дозволяємо кожному колесу відстежувати попередні skidmark точки так, щоб сліди шин від декількох коліс не були переплутані.

Ми створили prefab, для цього ви можете просто перетягнути його на сцену:

• Перетягніть Skidmarks prefab з Prefabs->VFX->Skidmarks на сцену.

Ми встановлюємо інтенсивність слідів від шин, регулюючи колір кожної створеної вершини. Інтенсивність визначається тим, наскільки сильний занос колеса. Для того щоб створити цей ефект ми використовуємо налаштований шейдер, який використовує альфа з кожної вершини при рендерінгу гальмівних слідів. Як і в автомобілі є кілька речей, які можуть бути змінені, щоб зробити сліди шин відповідні краще до машини, яку ви намагаєтеся побудувати.

Максимум слідів від шин
Змінна Max Marks визначає кількість позицій для слідів від шин, які можуть існувати на сцені в будь-який час. Всі колеса, використовують ті ж сліди від шин, так що це число розраховується на всі колеса. При досягненні слідів від шин максимальної кількості, перша позиція буде перезаписано. Збільшення цього числа також буде збільшувати сумарну довжину всіх частин слідів від шин на сцені.

Ширина слідів від шин
Змінна (Mark Width) визначає ширину слідів від шин. Вона повинна бути відрегульована, щоб відповідати колесам створеного транспортного засобу. Якщо це великий вантажівка ви спробуєте зробити дуже широкий skidmark, який нам необхідний, і якщо це «надзвуковий автомобіль» з ультра-тонкими шинами, виготовлені для встановлення рекорду швидкості, дуже тонкий skidmark буде виглядати реалістичнішими.

Наземне зміщення
Коли сітка для слідів від шин створена, вона буде створена з використанням точок, що обчислені з коліс для розміщення skidmark на дорозі. Ці точки найчастіше будуть прямими на поверхні під час сколжения коліс. Коли дві сітки виявляються відразу на верхній частині один одного, це може приводити до деяких мерехтінням в грі.

Щоб запобігти цьому, вводиться змінна Ground Offset (Наземне зміщення). Сітка буде створена і піднята на всю довжину зміщення в напрямку нормалі до поверхні. Так що, якщо деякий мерехтіння існує або сліди від шин перетинаються з поверхнею, спробуйте збільшити зміщення. Для подальшого забезпечення того, щоб сліди від шин залишалися на поверхні землі, що використовуються шейдери для слідів від шин, було створено зсув, і була приписана до другої черги візуалізації (Rendering).

Мінімальна дистанція
Коли нова точка додається до SkidmarkController вона повинна бути у (Min Distance) мінімальному відстані від останньої точки skidmark (слідів від шин). Це гарантує вам продуктивне додавання слідів від шин на дуже невеликі площі. Не встановлюйте це значення дуже великим, хоча це може зробити сліди від шин занадто великими, і крім того, збільшена відстань може здатися, ніби вони відстають від коліс т.е. сліди від шин з'являються за колесами. Зменшення значення буде якоюсь мірою згладжувати сліди від шин, створюючи ілюзію ніби сліди від шин «ближче» до коліс.

Текстури
Текстури шин для коліс від вантажівки досить різні в порівнянні зтекстурами шин на колесах з формули-1 (Formula-1). Текстури слідів від шин (skidmarks) будуть створюватися на поверхні. Якщо ви створили інший тип автомобіля з дуже різними колесами, вам потрібно буде змінити цю текстуру, якщо ви хочете, щоб сліди від шин відповідали колесам.

Додавання звуків
• Додайте скрипт SoundController.js ігровий об'єкт автомобіль «Car» (Перетягніть його з Scripts/Javascript/SoundController.js).

Компонент Звукового контролера (Sound Controller) має кілька слотів для аудіофайлів, які ми повинні призначити різні аудіофайли. Файли знаходяться в папці Sound/Car вікні проекту (Project view).
image
Перетягніть:

CarEngine_D_upper-register перетягнути на слот D. Встановіть гучність0,565.
CarEngine_E_midlow-register перетягнути на слот E. Встановіть гучність 0.8
CarEngine_F_midhigh-register перетягнути на слот F. Встановіть гучність 0.78
CarEngine_K_passing-rush перетягнути на слот K. Встановіть гучність 0.565
CarEngine_L_lower-register перетягнути на слот L. Встановіть гучність 0.71
Wind-loop_stereo_22khz_16bit перетягнути на слот Wind. Встановіть гучність 0.8
CarEngine_DEFL_tunnel-add_small перетягнути на слот Tunnel Sound. Встановіть гучність 0.8
Collision1 перетягнути на слот Crash Low Speed Sound. Встановіть гучність 0.8
Car_crash1_smaller перетягнути на слот Crash High Speed Sound. Встановіть гучність 0.5
Car_skid1 перетягнути на слот Skid Sound.
CarTutorialSong перетягнути на слот Background Music. Встановіть гучність 1.

Налаштування гучності (volume settings), звичайно це лише налаштування, які ми пропонуємо. Ви можете «пограти» з різними значеннями, щоб отримати точний звуковий образ, який ви собі уявляєте. Або ви могли б піти ще далі і створити свій власний меню налаштувань для звуку, дозволяючи налаштувати гучність музики і ефектів окремо в грі.

Завершення і збірка
Нарешті перетягніть такі скрипти на ігровий об'єктавтомобіль (Car):

LightmapperObjectUV.js з (scripts/Javascript)
CrashController.js з (scripts/Javascript)
Generate2DReflection.cs з (scripts/CSharpScripts)

Ми повинні зробити одну останню річ, перш ніж ми зможемо випробувати гру, яку ми тільки що створили. Камера повинна слідувати за машиною, в іншому випадку автомобіль просто уедит з поля зору, як тільки ми почнемо рух.

• Перейдіть до Main_Camera (Головна камера) і перетягніть її на ігровий об'єкт «Car» (Автомобіль) і направте камеру так як вам зручно для управління машиною (в рамках компоненту скрипта «Car Camera» Автомобільна камера ).
image
<habracut/>

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.