Занурення в скрипти ігрового движка Unity3d, ч
Ігровий об'єкт
Створення нового об'єкта з іменем MyObject. Створений об'єкт буде доступний за посиланням myObject.
Пошук об'єкта на його ім'я.
Теги можна використовувати для позначення групи об'єктів зі подібними властивостями або використовуються в єдиній сцені. Пошук об'єкта за тегом, повертає єдиний об'єкт:
Повертає список усіх об'єктів із зазначеним тегом:
Перевірка на наявність об'єкта необхідного тега. Повертає true, якщо вказаний об'єкт має тег MyTag:
Знищення об'єкта за хвилину, після його створення:
Повертає компонент component, прив'язаний до об'єкту GameObject, або null, якщо об'єкт не містить цього компонента. Може використовуватися, наприклад, для доступу до інших скриптів, прив'язаних до об'єкта.
Повертає всі компоненти типу componentType, що є у об'єкта.
Прив'язати компонент myComponent до об'єкта GameObject і отримати посилання на нього.
Положення ігрового об'єкту
Властивість transform об'єкта GameObject містить у собі дані про положення об'єкта в ігровому світі.
Повертає глобальні координати об'єкта в ігровому світі. Величина, що повертається, має тип Vector3, який являє собою список з 3 координат — x, y і z:
Перемістити об'єкт у точку 0, 10, 0 ігрового світу.
Теж саме, що й у разі глобальних координат, але з локальними. Локальні координати розсмоктуються щодо батьківського об'єкта. У разі відсутності батьківського об'єкта локальні координати збігаються із глобальними:
Поворот об'єкта в кутах Ейлера. Метод також повертає координати у вигляді об'єкта Vector3:
Теж саме, що й попереднійприклад, але поворот об'єкта розраховується щодо батьківського об'єкта:
Поточний кут повороту об'єкта, що базується на кватерніонах. Повертає об'єкт типу Quaternion.
Поточний поворот об'єкта, заснований на кватерніонах, але щодо батьківського об'єкта:
Скидання кута повороту об'єкта:
Обертаємо наш об'єкт у вказану сторону зі швидкістю 1 градус за секунду. Приймає як координати об'єкт типу Vector3. Метод deltaTime об'єкта Time містить час у секундах, витрачений виконання попереднього кадру:
Теж саме, що й попередній приклад, але обертання об'єкта щодо координат батька:
Переміщаємо наш об'єкт у вказаному напрямку зі швидкістю 1 юніт за секунду. Також приймає як координати об'єкт класу Vector3:
Фізичні властивості ігрового об'єкту
Метод rigidbody об'єкта GameObject зберігає у собі його фізичні властивості. Перш, ніж використовувати метод rigidbody, його необхідно додати до ігрового об'єкта.
Отримуємо/задаємо вектор швидкості об'єкта:
Сила протидії об'єкту. Може використовуватися для уповільнення швидкості в середовищі з відсутньою силою тертя. Найчастіше використовується уповільнення падаючих об'єктів, наприклад під час створення парашута. Приймає як параметр ціле число:
Завдання маси об'єкту. Рекомендується використовувати масу в межах від 0.1 до 10. Використання надто великих значень може призвести до непередбачуваних результатів при розрахунку фізики:
Вплив на об'єкт гравітації. Приймає як параметр булевого значення. Дозволяє відключити вплив гравітації на окремі об'єкти:
Вплив фізики на ігровий об'єкт. Дозволяє відключити частково або повністю вплив фізичнихзаконів на об'єкт:
Заборона на обертання об'єкта. Найчастіше використовується, коли необхідно зберегти певний кут повороту навіть після зіткнення з іншими об'єктами:
Вказівка координат точки центру маси об'єкта. Застосовує координати як вже знайомого нам об'єкта Vector3.
Чи використовувати об'єкт для виявлення зіткнень з іншими об'єктами. Можна вимкнути, тоді ваш об'єкт ігноруватиме будь-які зіткнення:
Режим визначення зіткнень між об'єктами. Можна вказати кілька різних режимів: CollisionDetectionMode.ContinuousDynamic для об'єктів, що швидко рухаються; CollisionDetectionMode.Continuous для зіткнень з об'єктами, що швидко рухаються; CollisionDetectionMode.Discrete (за замовчуванням) для звичайних зіткнень; У разі відсутності проблем із визначенням зіткнень рекомендується використовувати властивість за умовчанням.
Задати щільність об'єкта:
Застосувати імпульс до об'єкта із зазначеним вектором. В результаті застосування імпульсу об'єкт почне рухатися пропорційно силі імпульсу.
Застосувати імпульс до об'єкта з вектором у його (об'єкті) системи координат:
Додати об'єкту крутний момент. Застосування цього методу змусить об'єкт обертатися навколо свого центру мас GameObject.rigidbody.centerOfMass.
Теж саме, що й попередній приклад, але щодо координат об'єкта:
Застосування імпульсу до об'єкта із зовнішньої зазначеної точки. Примушує об'єкт рухатися та обертатися одночасно. Може використовуватися, наприклад, для симуляції влучення в об'єкт кулі. Перший параметр вказує вектор спрямування сили, другий параметр - вихідну точку спрямування сили.
Для повноцінної симуляції об'ємних вибухів у Unity3D є окремийметод. Перший параметр методу дозволяє вказати потужність імпульсу, другий параметр - точку, з якої виходить імпульс, третій параметр - радіус поширення імпульсу, четвертий параметр - модифікатор стиснення сфери поширення сили, п'ятий, необов'язковий параметр вказує тип використовуваного імпульсу:
Змусити об'єкт «заснути» і заборонити подальший розрахунок фізичних показників для нього:
Перевірити чи заснув об'єкт:
«Розбудити» об'єкт для можливості подальшого застосування впливу фізики на нього:
Трасування променів
Один із найчастіше використовуваних у розробці на Unity3D об'єкт, це Ray. Даний об'єкт дозволяє випустити промінь із зазначеної точки, у зазначеному напрямку, і повернути деякі властивості об'єктів, яких він зміг досягти.
Створюємо об'єкт класу RaycastHit, який містить інформацію про об'єкт, з яким зіткнувся промінь:
Відправляємо промінь довжиною в 50 юнітів з позиції rayPosition у напрямку rayVector, і заносимо об'єкт, з яким зіткнувся промінь у змінну hit:
Отримуємо дистанцію до об'єкта, з яким зіткнувся промінь. Дистанція не може бути більшою, ніж протяжність променя:
Іноді буває необхідно отримати ім'я об'єкта, з яким сталося зіткнення променя. Найпростіший спосіб це зробити:
Для отримання тега об'єкта використовуємо наступний спосіб:
Unity3D містить ще безліч різних методів та об'єктів, корисних і не дуже. На жаль, повний їх огляд збільшив би і без того об'ємну статтю, тому я постараюся розповісти про інше більш докладно в майбутньому, якщо мені здасться така можливість. Я хотів би побажати досвідченим розробникам більше цікавих проектів, а початківцям — успіхів та цікавих відкриттів. Спасибі щоприділили увагу цій статті.
UPD. друга частина (скриптові події).
Хардкорна конфа за С++. Ми запрошуємо лише профі.