Unity - Посібник Префаби (Prefabs)

Досить зручно працювати з GameObject у сцені, додаючи компоненти та змінюючи їх значення на потрібні вам в інспекторі. Однак, це може створити низку проблем у випадках, коли ви працюєте над створенням NPC, об'єктом або предметом, який багаторазово зустрічається у сцені. Ви, звичайно, можете просто скопіювати ці об'єкти для створення дублікатів, але всі вони редагуватимуться незалежно один від одного. Зазвичай ви бажаєте, щоб усі екземпляри окремо взятого об'єкта мали однакові значення властивостей, щоб при редагуванні одного такого об'єкта в сцені вам не довелося повторно вносити ті самі зміни та всі інші копії.

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

Важливо: Коли ви перетягуєте файловий асет (наприклад, міш) в сцену, буде створено новий екземпляр такого об'єкта і всі такі екземпляри зміняться при зміні оригінального ассета. Однак, хоч його поведінка і схоже, але ассет - це не префаб, так що у вас не вийде додати до нього компоненти або використовувати будь-які інші описані нижче властивості префабів.

Використання префабів

Ви можете створити префаб, вибравши Asset > Create Prefab і перетягнувши об'єкт зі сцени в порожній префаб, що з'явився в проекті. Після чого можна створювати екземпляри префабу, просто перетягуючи його з вікна Project на сцену. Імена об'єктів-екземплярів префаби будуть підсвічуватись синім у вікні Hierarchy(Імена звичайних об'єктів мають чорний колір).

Як уже згадувалося вище, зміни у префабі автоматично застосовуються до всіх її екземплярів, однак ви можете змінювати і окремі екземпляри. Це корисно, наприклад, у випадку, коли ви бажаєте створити кілька схожих NPC, але із зовнішніми відмінностями, щоб додати реалістичності. Щоб було чітко видно, що властивість в екземплярі префабу змінено, воно з'являється в інспекторі жирним шрифтом (якщо до екземпляра префабу додано зовсім новий компонент, то всі його властивості будуть написані жирним шрифтом).

префаби
Mesh Renderer на екземплярі префабу з перевизначеною властивістю “Cast Shadows”

Також можна створювати екземпляри префабів з коду під час виконання програми. Прочитайте сторінку посібника про створення екземплярів префабів для додаткової інформації.

Редагування префабу з його екземплярів

Інспектор екземпляра префабу містить три кнопки, які у звичайних об'єктів відсутні: Select (Виділити), Revert (Скасувати) та Apply (Застосувати).

Кнопка Select виділяє файл префабу, з якого було отримано цей екземпляр. Це дозволяє швидко знайти та відредагувати оригінальний префаб, застосовуючи зміни до всіх його екземплярів. Однак, ви також можете зберегти перевизначені властивості з екземпляра в самий оригінальний префаб за допомогою кнопки Apply (змінені значення положення та обертання трансформації не застосовуються з очевидних причин). Це дозволяє ефективно редагувати всі екземпляри через будь-який з них, і це швидкий та правильний спосіб вносити глобальні зміни. Якщо ви експериментуєте з перевизначенням властивостей, але в результаті вирішуєте, що початкові властивості (задані в префабі) вам краще, то ви можете скасувати всі зроблені перевизначенняза допомогою кнопки Revert, повернувши екземпляр у початковий стан.