ci / release (push) Successful in 5m5s
ci-platforms / build (amd64, windows, windows-2022) (push) Skipped
ci-platforms / build (arm64, darwin, macos-15) (push) Skipped
ci-platforms / build (amd64, darwin, macos-15-intel) (push) Skipped
ci / checks (push) Successful in 4m41s
ci / build (amd64, linux, ubuntu-24.04) (push) Successful in 7m14s
The remaining editor strings and undo step names; component, field, enum, setting, diagnostic and Script API texts under schema.*, enum.*, setting.*, diag.* and api.*; the launcher, the in-game Settings View with a Language setting, the CLI and aego schema show --lang. Every documentation page has a .ru.md translation; the site has a full Russian tree with hreflang, a language switch and ru/llms.txt; aego docs check --lang ru. New doc.tutorial and doc.recipe icons. Fix: an animator restored by a rewind prepares its controller before the replayed step.
53 lines
5.7 KiB
Markdown
53 lines
5.7 KiB
Markdown
---
|
|
id: prefabs
|
|
title: Префабы
|
|
---
|
|
# Префабы
|
|
|
|

|
|
|
|
Префаб — это часть сцены для повторного использования, которая хранится в файле `.aeprefab`. Каждая его копия в сцене — экземпляр. Экземпляр показывает префаб и хранит собственные изменения — переопределения. Когда префаб меняется, все экземпляры следуют за ним, а их переопределения остаются.
|
|
|
|
## Создание и размещение
|
|
|
|

|
|
|
|
- Перетащите узел из Иерархии на папку в «Ассетах» или выберите **Иерархия → Префаб → Создать префаб**. Узел станет экземпляром нового префаба и сохранит свои идентификаторы, поэтому ссылки на него продолжат работать.
|
|
- Перетащите `.aeprefab` в Иерархию или на панель «Сцена» либо выберите **Создать экземпляр в сцене** в его контекстном меню.
|
|
- Откройте префаб двойным щелчком или через **Префаб → Открыть префаб**. Сохранение префаба обновляет все открытые экземпляры за один шаг. Этот шаг можно отменить из любой из этих сцен.
|
|
|
|
## Переопределения
|
|
|
|
Любое изменение экземпляра — переопределение: свойство, добавленный или удалённый компонент, добавленный или удалённый узел, порядок дочерних узлов. Позиция, поворот и масштаб корня экземпляра всегда принадлежат самому экземпляру.
|
|
|
|
- Иерархия отмечает корни экземпляров значком префаба, а добавленные вами узлы — плюсом.
|
|
- Инспектор отмечает переопределённые свойства полосой слева, а добавленные компоненты — меткой `added`. В карточке «Префаб» наверху есть **Применить всё**, **Вернуть всё** и **Открыть**.
|
|
- Щёлкните правой кнопкой свойство, компонент или узел, чтобы применить его к префабу или вернуть.
|
|
|
|
Узлы из префаба внутри экземпляра сохраняют своего родителя. Чтобы переместить их, распакуйте экземпляр.
|
|
|
|
## Вложенные префабы и варианты
|
|
|
|
Префаб может содержать экземпляры других префабов. Когда вы применяете изменение, сделанное внутри вложенного экземпляра, выберите, куда оно пойдёт: в сам вложенный префаб или во внешний префаб как переопределение его вложенного экземпляра.
|
|
|
|
Вариант — это префаб, корень которого — экземпляр другого префаба: **Префаб → Создать вариант**. Вариант меняет то, что переопределяет, а во всём остальном следует своей основе.
|
|
|
|
## Неиспользуемые переопределения
|
|
|
|
Когда из префаба пропадает узел или компонент, который переопределяет экземпляр, переопределение сохраняется и попадает в список «Неиспользуемые переопределения» в карточке «Префаб». Оно ничего не делает, пока вы его не удалите. «Проблемы» показывают его как PFB002.
|
|
|
|
## Отсутствующие префабы
|
|
|
|
Если файла префаба нет, экземпляр загружается как пустой узел с именем префаба и сохраняется обратно без изменений. «Проблемы» показывают PFB001. Игра не блокируется.
|
|
|
|
## Распаковка
|
|
|
|
- **Распаковать** превращает экземпляр в обычные узлы; вложенные в него префабы становятся самостоятельными экземплярами.
|
|
- **Распаковать полностью** превращает всё в обычные узлы.
|
|
|
|
## Скрипты
|
|
|
|
`scene.Instantiate(prefab, parent)` создаёт копию во время игры. У копии новые идентификаторы узлов, а ссылки внутри неё указывают внутрь копии.
|
|
|
|
`node.IsPrefabInstance()` сообщает, является ли узел копией префаба или лежит ли внутри неё. `node.PrefabRoot()` возвращает корень этой копии.
|