Unity - Посібник Функції подій

Скрипт Unity не схожий на традиційну ідею програми, де код працює постійно в циклі, поки не завершить своє завдання. Натомість Unity періодично передає керування скрипту при викликі певних оголошених у ньому функцій. Як тільки функція завершує виконання, керування повертається назад до Unity. Ці функції відомі як функції подій, т.к. їх активує Unity у відповідь на події, що відбуваються у процесі гри. Unity використовує схему іменування, щоб визначити, яку функцію викликати певної події. Наприклад, ви вже бачили функцію Update (викликається перед зміною кадру) та функцію Start (викликається прямо перед першим кадром об'єкта). У Unity є набагато більше функцій подій; повний список із додатковою інформацією щодо їх застосування можна знайти на сторінці документації класу MonoBehaviour. Далі вказані одні з найважливіших і найпоширеніших подій.

Звичайні Update події

Гра - це щось подібне до анімації, в якій кадри генеруються на ходу. Ключовий концепт у програмуванні ігор полягає у зміні позиції, стану та поведінки об'єктів у грі прямо перед відмальовуванням кадру. Такий код у Unity зазвичай розміщують у функції Update. Update викликається перед відображенням кадру та перед розрахунком анімацій.

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

Також іноді корисно мати можливість внести додатковізміни в момент, коли всі об'єкти в сцені відпрацювали функції Update і FixedUpdate і розрахувалися всі анімації. Як приклад, камера повинна залишатися прив'язаною до цільового об'єкта; підстроювання орієнтації камери має здійснюватися після того, як цільовий об'єкт змістився. Іншим прикладом є ситуація, коли код скрипта повинен перевизначити ефект анімації (припустимо, змусити голову персонажа повернутись до цільового об'єкта у сцені). У таких ситуаціях можна використовувати функцію LateUpdate.

Події ініціалізації

Найчастіше корисно мати можливість викликати код ініціалізації перед будь-якими оновленнями, які відбуваються під час гри. Функція Start викликається до оновлення першого кадру чи фізики об'єкта. Функція Awake викликається для кожного об'єкта в сцені під час завантаження сцени. Врахуйте, що хоч для різних об'єктів функції Start та Awake і викликаються в різному порядку, всі Awake будуть виконані до першого Start. Це означає, що код функції Start може використовувати все, що було зроблено у фазі Awake.

Події GUI

У Unity є система для відтворення елементів керування GUI поверх того, що відбувається в сцені, і реагування на кліки по цих елементах. Цей код обробляється трохи інакше, ніж звичайне оновлення кадру, тому він повинен бути поміщений у функцію OnGUI, яка буде періодично викликатися.

Ви також можете визначати події миші, які спрацьовують у GameObject'а, що знаходиться у сцені. Це можна використовувати для наведення знарядь або для відображення інформації про персонажа під вказівником курсору миші. Існує набір функцій подій OnMouseXXX (наприклад OnMouseOver, OnMouseDown), який дозволяє скрипту реагувати на дії з мишею користувача. Наприклад, якщо кнопка миші натиснута втой час, коли курсор миші знаходиться над певним об'єктом, то, якщо в скрипті цього об'єкта є функція OnMouseDown, вона буде викликана.

Події фізики

Фізичний двигун повідомить про зіткнення з об'єктом за допомогою виклику функцій подій у скрипті цього об'єкта. Функції OnCollisionEnter, OnCollisionStay та OnCollisionExit будуть викликані на початку, продовження та завершення контакту. Відповідні функції OnTriggerEnter, OnTriggerStay та OnTriggerExit будуть викликані коли колайдер об'єкта налаштований як Trigger (тобто цей колайдер просто визначає, що його щось перетинає та не реагує фізично). Ці функції можуть бути викликані кілька разів поспіль, якщо виявлено більше одного контакту під час оновлення фізики, тому в функцію передається параметр, що надає додаткову інформацію про зіткнення (координати, "особистість" вхідного об'єкта і т.д.).