Unity - Розробка вашої першої гри за допомогою Unity та C#
Продукти та технології:
Unity, C#, Microsoft .NET Framework
У статті розглядаються:
- обертання та переміщення об'єктів;
- анімації та террейни;
- системи координат у Unity;
- потоки та співпрограми (coroutines).
Ви все ще зі мною у цьому циклі статей? Добре. У першій статті я розповів про деякі основи Unity (msdn.microsoft.com/magazine/dn759441). У другій статті я зосередився на двовимірній графіці (2D) у Unity (msdn.microsoft.com/magazine/dn781360). Тепер я перейду до своєї улюбленої частини розробки ігор до тривимірної графіки (3D). Тривимірний світ - це воістину чарівне місце: приголомшливі середовища, що створюють ефект повного занурення у світ гри, багаті звукові ефекти та гарні візуальні засоби; навіть проста гра-головоломка з реалістичною фізикою може зачепити так, що ви годинами будете в неї грати.
3D-ігри безперечно додають рівень складності порівняно з 2D, але крок за кроком ви поступово створюєте цікаву 3D-гру. Нові параметри проектів як для 2D, так і для 3D в Unity підтримують 3D. У 2D-грі можуть бути 3D-об'єкти і навпаки.
З чого складається тривимірна сцена?
Тривимірна (3D) сцена складається головним чином із трьох основних візуальних компонентів: джерел світла (lights), рендерів мішей (mesh renderers) та шейдерів. Unity підтримує чотири типи джерел світла. Ви знайдете їх у меню GameObject. Поекспериментуйте, додаючи різні типи та змінюючи їх властивості. Найпростіший з них — джерело спрямованого світла (directional light), яке подібне до сонця на небі.
Меш (mesh), або модель, - це набір вершин, що утворюють багатокутники,у тому числі складається який-небудь об'єкт. Шейдер є скомпільованою підпрограмою, що містить код для управління тим, як відображатиметься ваш об'єкт або як він взаємодіятиме з джерелом світла. Деякі шейдери просто беруть освітлення і відображають його подібно до дзеркала, інші - приймають текстуру (зображення, що застосовується до міша) і можуть створювати тіні та глибину, а деякі навіть дозволяють прорізати візуальні дірки у ваших моделях (приклад - огорожа).
Моделі зазвичай містяться у файлах .fbx або .obj, які експортуються з іншого програмного пакета для моделювання. FBX-файли також можуть зберігати дані анімацій, тому можна отримати один FBX-файл для своєї моделі і ще один, який містить кілька анімацій. Також підтримується ряд сторонніх файлових форматів, таких як Autodesk Maya (.ma) та Blender. Як правило, стороння програма повинна бути встановлена в тій же системі, якщо ви хочете, щоб Unity імпортував ці файли, а потім надавав можливість їх простого перетягування в проект Unity подібно до будь-яких інших файлів. «За лаштунками» Unity перетворюватиме інші файлові формати (при імпорті або виявленні змін у файлах) у формат .fbx.
Asset Store
У типовій 3D-грі застосовуються багато тих же концепцій, що і в 2D-іграх: колайдери, тригери, абсолютно тверді тіла (rigid bodies), ігрові об'єкти/перетворення, компоненти та ін. Незалежно від типу 3D-ігри зазвичай вам потрібно контролювати введення, переміщення та персонажів, використовувати анімації та ефекти частинок, а також вибудовувати уявний світ так, щоб він був і фантастичним, і реалістичним. Ми обговоримо деякі способи, якими Unity може допомогти досягти всього цього.
Контролери введення, переміщення та персонажів
Читання введення дляпереміщення в 3D трохи ускладнюється, тому що замість простого руху в площинах X і Y тепер можна рухатися в трьох вимірах: X, Y і Z. Варіанти 3D-переміщення включають (але не вичерпуються ними) рух зверху вниз, де персонаж рухається лише горизонтально та вертикально; повертання камери або персонажа при зчитуванні введення від миші, як це робиться у багатьох шутерах від першої особи (first-person shooter, FPS); зміщення вліво та вправо під час читання введення по горизонталі; обертання навколо себе при читанні введення горизонталлю або простий рух у зворотному напрямку. Варіантів переміщення дуже багато, тому вам є з чого вибирати.
Переміщаючи об'єкт, ви не повідомляєте йому позицію, на яку він повинен переміститися, як ви, можливо, очікували. Згадайте, що ви виконуєте код на кожному кадрі, тому повинні зміщувати об'єкт із невеликим збільшенням. Можна або віддати це на відкуп ядру підтримки фізики, додавши сили до абсолютно твердого тіла, або створити перехідну анімацію (tween) об'єкта. Останнє, по суті, означає перехід між значеннями, тобто рух з точки A до точки B. Є різні способи створення відповідного набору значень Unity, у тому числі застосування безкоштовних сторонніх бібліотек, таких як iTween. На рис. 1 показані деякі ручні способи переміщення об'єкта в Unity. Зауважте, що для простоти вони не оптимізовані (для оптимізації мені довелося б зберігати посилання на перетворення на змінну, щоб уникнути частого перемикання між керованим і «рідним» кодом).
Мал. 1. Різні методи переміщення об'єктів