Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
PZ_Хмелевский А.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.26 Mб
Скачать
  • великий набір можливостей у безкоштовній ліцензії та невисоку ціну за повну ліцензійну версію для великого компанії розробника ігор;

  • поліпшені можливості «скриптинга», а саме на відміну від UnrealEngine3, в Unity доступні три мови: JavaScript, C # і різновид Python's – Boo;

  • підтримка «повної» крос-платформеності навіть у безкоштовній ліцензії;

  • наявність гідним чином опрацьованого «фізичного движка»;

  • Ide поєднує редактор сцен (в комплексі загального редактора) з редактором ігрових об'єктів і редактор скриптів. Додатково додаються генератори дерев і «террейнів»;

  • роботу з API функціями графічних бібліотек – DirectX та OpenGL;

  • робота з ресурсами можлива через простий Drag & Drop інтерфейс;

  • присутня система успадкування об'єктів;

  • підтримка імпорту тривимірних об’єктів з дуже великої кількості форматів;

  • вбудована підтримка мережі;

  • є рішення для спільної розробки додатків – Version Control;

  • можна використовувати підходящий користувачеві спосіб контролю версій. Наприклад, Tortoise SVN або Source Gear.

До недоліки Unity можна віднести:

  • закритість коду. Неможливість отримання вихідних кодів «движка» навіть за ліцензією;

  • неможливість доповнення фізики движка сторонніми можливостями(Наприклад, SpeedTree).

    1. Основні поняття та компоненти Uniti3d

Якщо людина бодай раз працювала в 3D редакторах, поняття осі Z їй відомо – додаткова вісь до горизонтальної (X) та вертикальної (Y) осям. У 3D додатках інформація представлена в X, Y, Z-форматі – Декартовій системі координат – необхідна для визначення габаритних розмірів, поворотів та позиції об’єктів в просторі. Без цієї системи було би неможливо розміщувати об’єкти в тривимірному просторі.

Існує два типи простору локальний та світовий(глобальний). Важливо розуміти різницю між локальним (Local space) і глобальним простором (World space). У будь-якому 3D пакеті, технічно, користувач працює в нескінченному просторі, і може бути важко, стежити за розміщенням об'єктів всередині нього. У кожному 3D світі є початкова точка (початок координат), часто звана – нуль координата, так як її координати (0,0,0). Положення в глобальному просторі (world positions) всіх об'єктів в 3D світі визначається відносно початку координат або глобального нуля (world zero). Однак поряд з глобальним використовується і локальний (об'єктний) простір (Local space або Object space), для визначення позиції об'єктів щодо один одного. Локальне простір передбачає, що кожен об'єкт має власну точку відліку (нульову точку – zero point), з якої виходять осі об'єкта. Це звичайно (геометричний) центр об'єкта, і створюючи відносини між об'єктами, можна порівняти їх положення відносно один одного. Такі відносини, відомі як батьківсько-дочірні відносини (parent-child relationships), означають, що, використовуючи локальний простір, можна обчислити відстань щодо батьківського об'єкта до інших об'єктів, в цьому випадку батьківський об'єкт стає новим початком координат для будь-якого з його дочірніх об'єктів (див. рис. 2.6.1).

Рисунок 2.6.1 – Локальний та світовий простір в 3d

Вектори. 3D вектори також описуються в декартових координатах. Як і 2D вектори, 3D вектори являють собою лінію, тільки в 3D просторі, яка має напрям і довжину. Вектори можуть переміщатися в світовому просторі, але при цьому, самі не змінюються. Вектори відіграють велику роль у движку, тому що дозволяють обчислювати відстані, відносні кути між об'єктами, а також напрями об'єктів.

Камери. Камери мають велике значення для 3D світу, тому що вони виступають в ролі viewport-а (вікна перегляду) для екрану. Регульовану область видимості (поле зору) – Field of Vision (FOV), камер має пірамідальну форму. Камери можуть бути поміщені в будь-яку точку світу, бути анімовані, прикріплені до персонажа або об'єкта, бути частиною сценарію гри. 3D камера це вікно (viewport) в 3D світ. В ігровому «движку» для камер застосовуються різні ефекти, такі як lighting (освітлення), motion blurs (ефект розмитості зображення при відтворенні сцен руху), що б зімітувати реальне оточення, для кращого сприйняття оком людини, можна також додати й кінематографічні ефекти (ефекти які не відчуває людське око) такі як відблиски (lens flares) від сонця. Більшість сучасних 3D ігор використовують кілька камер, щоб показати частину ігрового світу, яку камера персонажа в даний момент не бачить. Для Unity це не складно, він (ігровий движок) дозволяє розміщувати кілька камер в одній сцені, які можуть бути налаштовані так, щоб була можливість використовувати будь-яку з них, як основну (головну) камеру (main camera), під час гри. Декілька камер можуть бути використані в грі для управляіння візуалізацією (rendering) окремих 2D і 3D елементів, як метод оптимізації. Наприклад, об'єкти можуть бути згруперовані по шарах (layers), а камери можуть бути призначені на візуалізацію (render) об'єктів в окремих шарах. Це дає більше контролю над індивідуальною візуалізацією (individual renders) певних елементів у грі [6].

Полігони, грані, вершини і меши. При побудові 3D фігур, всі об'єкти, в кінцевому рахунку, складаються з пов'язаних 2D фігур – званих полігонами (polygons). При імпорті з 3D додатків, Unity перетворює всі полігони об'єктів в трикутні полігони (polygon triangles). Трикутні полігони (polygon triangles), в свою чергу, складаються з трьох граней (edges). Місця, в яких ці грані (edges) зустрічаються, називаються точками або вершинами (points або vertices). Знаючи ці місця, ігровий движок здатний провести розрахунки точок удару, відомих як collisions (зіткнення), використовуючи складне виявлення зіткнень (complex collision detection) з Mesh Colliders, в шутерах, можливо визначити точне місце, в якому куля вразила інший об'єкт. Завдяки поєднанню пов'язаних полігонів 3D редактори дозволяють створювати складні фігури, звані «мешамі» (meshes). Дані, що зберігаються в мешах (meshes), можуть використовуватися для ряду інших завдань, відмінних від побудови 3D фігур. В ігрових проектах, дуже важливо для розробника зрозуміти важливість кількості полігонів (polygon count). Кількість полігонів – це загальне число полігонів, найчастіше по відношенню до моделі, але й із посиланням на весь рівень гри. Чим більше кількість полігонів, тим більше роботи комп'ютеру необхідно зробити, щоб візуалізувати (render) об'єкт на екрані. Розробнику ігор необхідно знайти баланс між кількістю полігонів (деталізація моделей, кількість об'єктів на рівні) і продуктивністю візуалізації (render).

Матеріали, текстури і шейдери. Матеріали (Materials) загальне поняття для всіх 3D додатків, так як вони забезпечують засоби для створення зовнішнього вигляду 3D моделей. Від базових кольорів до відбиваючих поверхонь (reflective image - based), матеріали здатні на все. Починаючи з простих квітів і можливість використовувати один або кілька зображень – відомих як текстури (textures) – в одному матеріалі, і закінчуючи, працею з шейдерами (shader), чий код відповідає за стиль візуалізації (rendering). Наприклад, при використанні шейдерів відображення (reflective shader), матеріал буде відображати навколишні предмети, але при цьому зберігати свій колір і зовнішній вигляд зображення, вживаного як текстури. У Unity, використовувати матеріали легко. Будь-які матеріали створені в 3D редакторах, будуть імпортовані і автоматично відтворені ігровим движком в якості ресурсу (assets), для подальшого застосування. Так само можна створити свій власний матеріал «з нуля», призначивши зображенню з файлу текстури та вибравши потрібний шейдер з обширної вбудованої бібліотеки. Також можна написати власний скрипт шейдера або використовувати створені членами співтовариства (community) Unity. Важливо відзначити, що при створенні текстури для гри в графічних пакетах, таких як Photoshop, необхідно знати певні правила. Текстури повинні бути квадратними і мати розмір рівний ступені двох, тобто вони повинні мати однакову роздільну здатність [6]:

    • 32 x 32;

    • 64 x 64;

    • 128 x 128;

    • 256 x 256;

    • 512 x 512;

    • 1024 x 1024.

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

Фізика твердих тіл. Для розробників, що працюють з ігровим движком, фізичний движок (physics engines) виробляє симуляцію фізичних законів реального світу в світі віртуальному з тією чи іншою мірою достовірності. Unity, як фізичний двигун, використовує Nvidia's PhysX engine. В ігровому движку відсутня припущення, що всі об'єкти піддаються фізичному впливу, тому що, по-перше, це вимагає величезних обчислювальних витрат, і по-друге, в цьому немає необхідності. Наприклад, в автоперегонах, автомобіль повинен перебувати під впливом фізичного движка, але не навколишні предмети, такі як дерева, стіни, тому що в цьому немає необхідності. Тому, роблячи ігри, компонент Rigid Body присвоюється будь-якому об'єкту, який, за задумом, повинен знаходитися під контролем фізичного движка (physics engine). Фізичний движок використовують систему динаміки Rigid Body, для створення реалістичного руху. Це означає, що замість статичних об'єктів, що знаходяться в 3D світі, застосовуються об'єкти, у яких можуть бути наступні властивості:

  • Маса (Mass);

  • Гравітація (Gravity);

  • Швидкість (Velocity);

  • Тертя (Friction).

Виявлення зіткнень. Велике значення в ігровому движку має виявлення зіткнень (collision detection) – це спосіб, за допомогою якого аналізується 3D світ на предмет зіткнень між ігровими об'єктами. Привласнюючи об'єкту компонент Collider, фактично, навколо нього розміщується невидима сітка. Ця сітка, по можливості, імітує форму об'єкта та інформує про зіткнення з іншим collider-ом, надалі, ігровий движок реагує на ці зіткнення відповідним чином. Наприклад, у грі симуляторі боулінгу, кулі будуть мати простий сферичний collider, в той час як у кеглів, collider матиме форму циліндра / капсули або, для більшої реалістичності зіткнень, collider буде використовувати меш (mesh). Інформація про зіткнення collider-ів надходить у фізичний движок (physics engine), який повідомляє об'єктам які зіштовхнулися їх подальшу реакцію на це зіткнення, засноване на напрямку удару, швидкості та інших факторах. Використання collider-ів, які повторюють форму меша, не дивлячись на те, що надається можливість точніше визначати зіткнення, це призводить до збільшення витрат на їх обчислення.

Ресурси. Ресурси (Assets) – будівельні / складові блоки всіх проектів Unity. Ігровий движок посилається на файли зображень, 3D моделей, звуків, які будуть використовуватися, при створенні гри, в якості ресурсів (assets). Ось чому в будь-якій папці проекту Unity, є підкаталог, де зберігаються всі файли ресурсів, з ім'ям Assets.

Сцени. У Unity, необхідно думати про сцени (scenes), як про ігрові рівні або області ігрового контенту (наприклад, меню). Створюючи гру з безліччю сцен, з’являється можливість розподіляти час завантаження і тестування різних частин гри окремо.

Ігрові Об'єкти. Коли ресурс (asset) використовується в сцені гри, він стає ігровим об'єктом (Game Object) – у термінології Unity, особливо в скриптингу, використовується термін «GameObject». Усі об'єкти (GameObjects), спочатку, мають хоча б один компонент (component) – Transform (Перетворення). Transform говорить движку Unity про становище (position), поворот (rotation) та масштаб (scale) об'єкта, описаних в X, Y, Z координатах (або у випадку з масштабом, розмірність). Крім того, до цього компоненту можна звернутися з скрипта, щоб встановити його положення (position), поворот (rotation) або масштаб (scale). Додаючи різні компоненти до об'єкта, можна значно розширити його функціонал, для забезпечення реалізації будь-якого бажаного сценарію гри [6].

Компоненти. Компоненти (components) мають різне призначення – вони можуть впливати на поведінку, зовнішній вигляд і багато інших властивостей об'єкта у грі. «Прикріплюючи» («attaching») компонент до об'єкта можна відразу ж скористатися можливостями що надаються цим компонентом. Unity надає безліч компонентів різного призначення. Для забезпечення інтерактивності різних ігрових елементів, мажна використовувати скрипти, які розглядаються Unity як компоненти.

Скрипти. Не дивлячись на те, що скрипти є компонентами Unity, вони є важливою частиною розробки ігор і заслуговують окремої згадки. Unity надає можливість використовувати для написання скриптів JavaScript, C# та Boo (похідний від мови Python). Unity не вимагає від програміста знання коду движка, однак можна використовувати скрипти в кожній розроблюваній грі. Писати скрипти в Unity дуже просто, побачите це можна після кількох прикладів. Що б писати скрипти можна використовувати вбудований редактор скриптів. Для Mac це Unitron, а для PC – Uniscite. Версію для РС ви можете знайти за наступним шляхом \Unity\Editor\Data\Tools\UniSciTE\UniSciTE.exe. Внесення змін і збереження скрипта в редакторі, негайно оновить скрипт в Unity. Також можна призначити свій власний редактор скриптів в налаштуваннях Unity [6].

Префаб. Основною концепцією Unity є використання ігрових об'єктів (Game Object), але при цьому є «розумний» спосіб зберігати об'єкти як ресурси (assets), які будуть використані в різних частинах гри, ці ресурси можуть бути заново «породжені» або «клоновані» в будь-який час. При створенні складних об'єктів з різними компонентами та налаштуваннями, буде ефективніше створити первинний шаблон, з якого і будуть створені ці об'єкти, при цьому для кожного екземпляра можливі індивідуальні налаштування і зміни. Префаб (Prefabs – заготовка) – це один з типів ресурсів, призначень для багаторазового використання. Префаб може бути вставлений в будь-яку кількість сцен і багаторазово в одну сцену. Коли префаб додається в сцену, створюється його екземпляр. Усі екземпляри є посиланнями на оригінальний префаб і фактично його клонами. Незалежно від того, як багато екземплярів у проекті, при зміні префабов змінюються відповідно і всі його екземпляри [6].

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]