Files
sanspie a46347e2c6
ci-platforms / darwin arm64 smoke (push) Skipped
ci / build (amd64, linux, ubuntu-24.04) (push) Failing after 12m19s
ci-platforms / darwin amd64 smoke (push) Skipped
ci-platforms / windows amd64 smoke (push) Skipped
github-native / gitea-pending (push) Skipped
github-native / darwin amd64 native (push) Skipped
github-native / linux amd64 native (push) Skipped
github-native / windows amd64 native (push) Skipped
github-native / darwin arm64 native (push) Skipped
github-native / gitea-result (push) Skipped
ci / checks (push) Failing after 23m57s
ci / release (push) Skipped
GitHub / windows amd64 native GitHub-hosted native CI: failure
GitHub / darwin arm64 native GitHub-hosted native CI: failure
GitHub / darwin amd64 native GitHub-hosted native CI: failure
GitHub / linux amd64 native GitHub-hosted native CI: success
editor: add art studio and stage 12.5 workflows
2026-11-08 18:47:57 +03:00

55 lines
5.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
id: prefabs
title: Префабы
---
# Префабы
![Экземпляр префаба выбран в Иерархии: оранжевый куб отмечает экземпляры](shots/prefab.png)
Префаб — это часть сцены для повторного использования, которая хранится в файле `.aeprefab`. Каждая его копия в сцене — экземпляр. Экземпляр показывает префаб и хранит собственные изменения — переопределения. Когда префаб меняется, все экземпляры следуют за ним, а их переопределения остаются.
В [примере с лампами](ref:prefabs/example) показаны несколько копий с разными переопределениями.
## Создание и размещение
![Режим префаба: префаб открыт отдельно, а цепочка навигации ведёт обратно в сцену](shots/prefab-mode.png)
- Перетащите узел из Иерархии на папку в «Ассетах» или выберите **Иерархия → Префаб → Создать префаб**. Узел станет экземпляром нового префаба и сохранит свои идентификаторы, поэтому ссылки на него продолжат работать.
- Перетащите `.aeprefab` в Иерархию или на панель «Сцена» либо выберите **Создать экземпляр в сцене** в его контекстном меню.
- Откройте префаб двойным щелчком или через **Префаб → Открыть префаб**. Сохранение префаба обновляет все открытые экземпляры за один шаг. Этот шаг можно отменить из любой из этих сцен.
## Переопределения
Любое изменение экземпляра — переопределение: свойство, добавленный или удалённый компонент, добавленный или удалённый узел, порядок дочерних узлов. Позиция, поворот и масштаб корня экземпляра всегда принадлежат самому экземпляру.
- Иерархия отмечает корни экземпляров значком префаба, а добавленные вами узлы — плюсом.
- Инспектор отмечает переопределённые свойства полосой слева, а добавленные компоненты — меткой `added`. В карточке «Префаб» наверху есть **Применить всё**, **Вернуть всё** и **Открыть**.
- Щёлкните правой кнопкой свойство, компонент или узел, чтобы применить его к префабу или вернуть.
Узлы из префаба внутри экземпляра сохраняют своего родителя. Чтобы переместить их, распакуйте экземпляр.
## Вложенные префабы и варианты
Префаб может содержать экземпляры других префабов. Когда вы применяете изменение, сделанное внутри вложенного экземпляра, выберите, куда оно пойдёт: в сам вложенный префаб или во внешний префаб как переопределение его вложенного экземпляра.
Вариант — это префаб, корень которого — экземпляр другого префаба: **Префаб → Создать вариант**. Вариант меняет то, что переопределяет, а во всём остальном следует своей основе.
## Неиспользуемые переопределения
Когда из префаба пропадает узел или компонент, который переопределяет экземпляр, переопределение сохраняется и попадает в список «Неиспользуемые переопределения» в карточке «Префаб». Оно ничего не делает, пока вы его не удалите. «Проблемы» показывают его как PFB002.
## Отсутствующие префабы
Если файла префаба нет, экземпляр загружается как пустой узел с именем префаба и сохраняется обратно без изменений. «Проблемы» показывают PFB001. Игра не блокируется.
## Распаковка
- **Распаковать** превращает экземпляр в обычные узлы; вложенные в него префабы становятся самостоятельными экземплярами.
- **Распаковать полностью** превращает всё в обычные узлы.
## Скрипты
`scene.Instantiate(prefab, parent)` создаёт копию во время игры. У копии новые идентификаторы узлов, а ссылки внутри неё указывают внутрь копии.
`node.IsPrefabInstance()` сообщает, является ли узел копией префаба или лежит ли внутри неё. `node.PrefabRoot()` возвращает корень этой копии.