Prefabs
Unity Manual > User Guide > Building Scenes > Prefabs

Prefabs

Префаб — это один из типов ресурсов, предназначений для многократного использования и хранящийся в Project View. Префаб может быть вставлен в любое количество сцен и многократно в одну сцену. Когда префаб добавляется в сцену, создаётся его экземпляр. Все экземпляры являются ссылками на оригинальный префаб и фактически его клонами. Независимо от того, как много экземпляров в проекте, при изменении префаба изменяются соответственно и все его экземпляры.

Creating Prefabs

Сначала нужно создать пустой префаб, а затем наполнить его объектами. Пустой префаб в сцене разместить нельзя. Вообще, можно думать о префабе, как о контейнере, который заполняется объектами.

Пустой префаб.

Чтобы заполнить префаб, создаём объекты в сцене.
* Assets>Create->Prefab
.
* В Hierarchy View, выбираем нужные нам объекты.
* Перетаскиваем объекты из Hierarchy View на наш префаб в Project View.

Объект и все его дочерние объекты будут скопированы в префаб. Префаб теперь может быть помещён в сцену в виде экземпляров. Объект, который мы использовали для создания префаба, станет его экземпляром.

Prefab Instances

Для создания экземпляра префаба в сцене достаточно перетащить префаб из Project View в Scene View или Hierarchy View. Экземпляры — это ссылки на префаб. В Hierarchy View они подписывается синим цветом.

Три объекта, подписанные синим, являются ссылками на префаб.

* Если выбрать экземпляр префаба и нажать кнопку Select в Inspector, то будет выбран префаб.
* Информация о создании экземпляров через скрипт приводится в параграфе Instantiating Prefabs.

Inheritance

Каждый раз, когда исходный префаб меняется, эти изменения применяются ко всем его экземплярам. Для примера, если добавить новый скрипт к префабу, то все экземпляры будут тоже содержать этот скрипт. Однако, можно изменять свойства экземпляра не затрагивая префаб и связи с ним. При простом изменении свойства экземпляра имя этого свойства будет написано жирным начертанием. Если затем изменить это свойство в префабе, то на экземпляре это не скажется.

Можно изменять экземпляры и создавать уникальные объекты, не нарушая связей с префабом.

Связанный GameObject без включенных переопределений.

Связанный GameObject с одним включенным переопределением.

* Чтобы обновить исходный префаб в соответствии с изменениями, внесёнными в выделенный экземпяр, нажмите Apply в Inspector.
* Чтобы отказаться от всех изменений в экземпляре, нажмите Revert.

Breaking and Restoring Prefab Links

Связб между экземпляром и префабом может быть разорвана и восстановлена. Следующие действия нарушают связь между экземпляром и префабом:

* Добавление и удаление компонентов.
* Добавление и удаление объектов.

Эти действия сопровождаются предупреждением или запросом подтверждения. Для восстановления связи нужно нажать кнопку Reconnect или Apply в Inspector экземпляра.
* Reconnect
приведёт экземпляр к исходному положению.
* Apply применит все изменения к префабу (и к остальным экземплярам, соотвественно).

Imported Prefabs

Когда файл меша (или другого ресурса) размещён в папке Assets проекта, Unity автоматически импортирует файл и генерирует нечто, похожее на префаб. Это не префаб, а файл ресурса. Создание экземпляров и работа с ресурсом в данном случае имеют некоторые ограничения по сравнению с настоящим префабом.


Иконка ресурса немного отличается от иконки префаба.

Ресурс, помещённый в сцену как объект, является экземпляром и ссылается на исходный ресурс вместо префаба. Компоненты могут быть добавлены к этому объекту или удалены из него, как и в случае с обычным объектом. Однаком, нельзя применить изменения к самому ресурсу, так для этого потребовалось бы непосредственно изменить файл ресурса. Чтобы получить функционал префаба нужно данный ресурс превратить префаб через шаги описанные выше.

Когда выделен экземпляр ресурса, кнопка Apply в Inspector заменена кнопкой Edit. Нажатие на эту кнопку вызовет ассоциированное с ресурсом приложение, в котором его можно будет отредактировать.