Как изменить префаб в юнити
Перейти к содержимому

Как изменить префаб в юнити

  • автор:

Префабы (Prefabs)

Довольно удобно работать с GameObject в сцене, добавляя компоненты и изменяя их значения на нужные вам в инспекторе. Однако, это может создать ряд проблем в таких случаях, когда вы работаете над созданием NPC, объектом или предметом, который многократно встречается в сцене. Вы, конечно, можете просто скопировать эти объекты для создания дубликатов, но все они будут редактироваться независимо друг от друга. Обычно вы желаете, чтобы все экземпляры отдельно взятого объекта имели одинаковые значения свойств, чтобы при редактировании одного такого объекта в сцене вам не пришлось повторно вносить те же изменения и во все остальные копии.

К счастью, в Unity можно создавать префабы . Это особый тип ассетов, позволяющий хранить весь GameObject со всеми компонентами и значениями свойств. Префаб выступает в роли шаблона для создания экземпляров хранимого объекта в сцене. Любые изменения в префабе немедленно отражаются и на всех его экземплярах, при этом вы можете переопределять компоненты и настройки для каждого экземпляра в отдельности.

Важно: Когда вы перетаскиваете файловый ассет (например, меш) в сцену, будет создан новый экземпляр такого объекта и все такие экземпляры изменятся при изменении оригинального ассета. Однако, хоть его поведение и похоже, но ассет — это не префаб, так что у вас не выйдет добавить к нему компоненты или использовать любые другие описанные ниже свойства префабов.

Использование префабов

Вы можете создать префаб, выбрав Asset > Create Prefab и перетащив объект со сцены в “пустой” префаб, появившийся в проекте. После чего можно создавать экземпляры префаба просто перетаскивая его из окна Project на сцену. Имена объектов-экземпляров префабы, будут подсвечиваться синим в окне Hierarchy (имена обычных объектов имеют чёрный цвет).

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

Mesh Renderer на экземпляре префаба с переопределённым свойством Cast ShadowsMesh Renderer на экземпляре префаба с переопределённым свойством “Cast Shadows”

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

Редактирование префаба из его экземпляров

Инспектор экземпляра префаба содержит три кнопки, которые у обычных объектов отсутствуют: Select (Выделить), Revert (Отменить) и Apply (Применить).

Кнопка Select выделяет файл префаба, из которого был получен данный экземпляр. Это позволяет быстро найти и отредактировать оригинальный префаб, применяя изменения ко всем его экземплярам. Однако, вы также можете сохранить переопределённые свойства из экземпляра в сам оригинальный префаб с помощью кнопки Apply (изменённые значения положения и вращения трансформации не применяются по очевидным причинам). Это позволяет эффективно редактировать все экземпляры через любой из них, и это быстрый и правильный способ вносить глобальные изменения. Если вы экспериментируете с переопределением свойств, но в итоге решаете, что изначальные свойства (заданные в префабе) для вас предпочтительнее, то вы можете отменить все сделанные переопределения с помощью кнопки Revert, вернув экземпляр в изначальное состояние.

Editing a Prefab in Prefab Mode

To edit a Prefab An asset type that allows you to store a GameObject complete with components and properties. The prefab acts as a template from which you can create new object instances in the scene. More info
See in Glossary Asset, open it in Prefab Mode. Prefab Mode allows you to view and edit the contents of the Prefab Asset separately from any other GameObjects The fundamental object in Unity scenes, which can represent characters, props, scenery, cameras, waypoints, and more. A GameObject’s functionality is defined by the Components attached to it. More info
See in Glossary in your Scene A Scene contains the environments and menus of your game. Think of each unique Scene file as a unique level. In each Scene, you place your environments, obstacles, and decorations, essentially designing and building your game in pieces. More info
See in Glossary . Changes that you make in Prefab Mode affect all instances of that Prefab.

Entering and exiting Prefab Mode

You can edit a Prefab Asset in isolation, or in context.

In isolation: When you edit a Prefab in isolation, Unity hides the rest of your current working Scene, and you only see the GameObjects that relate to the Prefab itself (plus, optionally, a pre-set editing environment — see below).

In context: When you edit a Prefab in context, the rest of your current working Scene remains visible, but locked for editing.

Editing in isolation

You can begin to edit a Prefab in Prefab Mode in several ways. To open a Prefab Asset and edit it in isolation you can do it in the following ways:

  • Double-click the Prefab Asset in the Project window
  • Select a Prefab Asset in the Project window A window that shows the contents of your Assets folder (Project tab) More info
    See in Glossary and click the Open Prefab button in the Inspector A Unity window that displays information about the currently selected GameObject, asset or project settings, allowing you to inspect and edit the values. More info
    See in Glossary
    window

When you enter Prefab Mode in isolation, Unity only shows the contents of that Prefab in the Scene view An interactive view into the world you are creating. You use the Scene View to select and position scenery, characters, cameras, lights, and all other types of Game Object. More info
See in Glossary
and the Hierarchy window. In the following image, the root of the Prefab is a regular GameObject — it doesn’t have the blue Prefab instance icon.

The Scene view and Hierarchy, with Prefab Mode in isolationThe Scene view and Hierarchy, with Prefab Mode in isolation

In Prefab Mode, the Scene view displays a breadcrumb bar at the top. The rightmost entry is the currently open Prefab. Use the breadcrumb bar to navigate back to the main Scenes or other Prefab Assets that you might have opened.

The breadcrumb bar at the top of the Scene view, visible when in Prefab ModeThe breadcrumb bar at the top of the Scene view, visible when in Prefab Mode

The Hierarchy window displays a Prefab header bar at the top which shows the currently open Prefab. You can use the back arrow in the header bar to navigate back one step, which is equivalent to clicking the previous breadcrumb in the breadcrumb bar in the Scene view.

The back arrow in the header bar of the Hierarchy window, visible when in Prefab ModeThe back arrow in the header bar of the Hierarchy window, visible when in Prefab Mode

Editing in context

Alternatively, you can open a Prefab Asset in Context via an instance of that Prefab. Ways of doing that include:

  • Select a Prefab instance in the Hierarchy window and click the Open button in the Inspector window
  • Select a Prefab instance in the Hierarchy window and press P on the keyboard. This is the default keyboard binding
  • Use the arrow button next to the Prefab instance in the Hierarchy window

By default, Unity displays the visual representation of the context in gray scale to visually distinguish it from the Prefab contents you edit. However, you can use the Context: control in the Prefab bar to set it to any of the following states:

  • Normal — Shows the context with its normal colors
  • Gray — Shows the context in gray scale
  • Hidden — Hides the context entirely so only the Prefab content is visible

You cannot select the GameObjects that are part of the context, nor do they show in the Hierarchy. This is so you can focus on editing your Prefab without accidentally selecting other unrelated GameObjects, and without having a cluttered Hierarchy window. However, when you move GameObjects around that are part of the Prefab contents, you can use the snapping features in Unity to snap to GameObjects in the context, provided the context is not set to Hidden.

In Prefab Mode in Context, Unity displays the Prefab contents at a position that matches that of the Prefab instance it was opened through. This means that you might preview the root Transform The Transform at the top of a hierarchy of Transforms. In a Prefab, the Root Transform is the topmost Transform in the Prefab. In an animated humanoid character, the Root Transform is a projection on the Y plane of the Body Transform and is computed at run time. At every frame, a change in the Root Transform is computed, and then this is applied to the GameObject to make it move. More info
See in Glossary of the Prefab contents with different position and rotation values than the Prefab Asset actually has.

You cannot edit these values in Prefab Mode in Context. If you need to edit them, you can either open the Prefab in isolation, or select the Prefab Asset in the Project window and edit the values in the Inspector.

Apart from the root Transform properties, you can also override other properties of a Prefab instance, which might drastically change its appearance compared to the Prefab Asset it’s an instance of. To preview these overridden values from the Prefab instance, while in Prefab Mode in Context enable the Show Overrides toggle in the Prefab bar. While this setting is enabled, any properties that ayou override on the Prefab instance are previewed the same way on the Prefab contexts and you cannot edit them. To edit those properties, disable the Show Overrides toggle again.

Auto Save

Prefab Mode has an Auto Save setting in the top right corner of the Scene view. When it is enabled, Unity automatically saves any changes that you make to a Prefab to the Prefab Asset. Auto Save is on by default.

The Auto Save toggle in the upper right corner of the Scene view in Prefab ModeThe Auto Save toggle in the upper right corner of the Scene view in Prefab Mode

If you want to make changes without automatically saving those changes to the Preset Asset, disable the Auto Save checkbox. In this case, Unity asks you if you want to save unsaved changes or not when you exit Prefab Mode for the current Prefab. If editing a Prefab in Prefab Mode seems slow, turning off Auto Save might help.

Changing between isolation or in context mode

When you open Prefab Mode via a Prefab Asset, Unity displays the contents of the Prefab in isolation. However, when you open Prefab Mode via a Prefab instance in the Hierarchy window, this opens Prefab Mode in Context.

When you open Prefab Mode this way, you can see the context of the Prefab instance in the Scene view even though you are not editing the instance but rather the Prefab Asset itself. For example, if you open Prefab Mode in Context via a Prefab instance in a Scene, then you can see the surroundings in that Scene while you edit the Prefab. The Prefab is also shown with the same lighting conditions as in the Scene.

A Prefab opened in Prefab Mode in Context, with the surrounding context displayed in gray scaleA Prefab opened in Prefab Mode in Context, with the surrounding context displayed in gray scale

If you have a Prefab instance that you do not want to open in context, but want to open in isolation, hold down the Alt key and click the Open button or the arrow button to open Prefab Mode. You can also set up a custom shortcut in the Shortcuts window for the command Stage > Edit Prefab in Isolation.

When you make changes to a Prefab Asset while in Prefab Mode, you can only undo those changes while still in Prefab Mode. Once you exit Prefab Mode for a given Prefab Asset, your edits relating to that Prefab Asset are no longer available in the undo history.

Editing Environment

You can assign a Scene as an editing environment to be used with Prefab Mode in Isolation. This allows you to edit your Prefab against a backdrop of your choosing rather than an empty Scene. This can be useful to see how your Prefab looks against a specific scenery of your choice. Unity only uses this editing environment when you open Prefab Mode in Isolation.

You cannot select the GameObjects in the Scene that you assign as the editing environment when in Prefab Mode, nor do they show in the Hierarchy. This is so you can focus on editing your Prefab without accidentally selecting other unrelated GameObjects, and without having a cluttered Hierarchy window.

To set a Scene as the editing environment, open the Editor window (top menu: Edit > Project Settings, then select the Editor category) and go to the Prefab Editing Environment section. Use the Regular Environment setting for “non-UI” Prefabs, and the UI Environment setting for UI Prefabs. UI Prefabs are those which have a Rect Transform component on the root, rather than a regular Transform component. “non-UI” Prefabs are those which have a regular Transform component.

Prefab editing environment settings in the Editor Project SettingsPrefab editing environment settings in the Editor Project Settings

Советы по работе с префабами в Unity

Всем привет! Меня зовут Григорий Дядиченко, и я технический продюсер. Сегодня хотелось бы обсудить работу с префабами, их организацию и несколько советов по тому, как работать с префабами и с вариантами. Насобирав несколько шишек на проектах у меня сформировалось некоторое число типовых проблем и советов при неправильной организации. Если хотите сделать работу с префабами удобнее, добро пожаловать под кат!

Что такое префаб?

В юнити довольно много удобных инструментов работы с данными, один из которых – префаб. По сути в Unity есть два вида конфигов с визуальным интерфейсом для манипулирования ими. Prefab и ScriptableObject. Если Scriptable Object больше про чистое хранение данных, то Prefab по сути конфиг “аналогичный xaml” в UWP, который позволяет реализовывать концепцию MVVM, и является в ней View. Мне в целом нравится архитектура, когда префабы – это View, компоненты – View-Model, а Scriptable Object – модель. Это довольно удобно. Но в любой другой схеме архитектуры по MVP, MVC и т.п. можно префабы считать за View.

Под капотом префаб или скриптабл обжект – это YAML конфиг. Если в Unity включена текстовая сериализация в настройках редактора то его даже можно открыть и почитать.

Структурно он обычно состоит из ссылок на другие префабы, файлы, скрипты и т.п. и наборы сериализуемых параметров. При этом тут стоит сразу сделать отступление на что такое Prefab Variant. Это такой же YAML конфиг, который похож на префаб в своей сути, но он хранит ссылку на оригинальный префаб m_SourcePrefab и его модификации m_Modification + удалённые компоненты m_RemovedComponents.

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

При этом варианты хранят только то, что изменилось, что позволяет сериализацию сделать более компактной для различных “модифицированных” версий объектов в отличии от разных префабов. Единственным исключением из этого правила является набор параметров трансформа (что больше похоже на баг Unity, чем на обоснованную фичу).

Базовые элементы

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

Кнопка как базовый элемент будет использоваться по всему интерфейсу, поэтому полезно сначала собрать типовые кнопки с нужными размерами шрифтов и т.п. Важно: в работе с префабами никогда не ленитесь писать названия, потом это сэкономит уйму времени при решении разных задач. Из-за того что это необязательно не стоит считать что это неважно.

Я собрал кнопку из кучи кружков, потому что на самом деле про интерфейс можно сказать так: «Дайте мне один кружок и на нём можно собрать очень много вариантов интерфейса». При этом это очень удобный концепт, так как весить такой интерфейс будет примерно ничего. В дальнейшем кроме каких-то иконок все базовые панели мы так же соберём с помощью одного спрайта-кружка. Вот пример вариантов кнопок:

Теперь соберём по аналогичному принципу фон для окна.

В данном случае у них есть некоторый “общий элемент” bg-circle-shadow. Его конечно же можно вынести в отдельную компоненту, чтобы пакетно красить тени, менять их реализацию и т.п. Но по опыту в разных сущностях лучше не обобщать такие элементы, так как именно из-за этого потом возникают проблемы “я поменял кнопку, а сломались все окна”. Изменение префабов с помощью инструментов Unity — слишком простое действие. Но тем не менее не хочется терять возможность пакетной обработки. Поэтому лучше заранее продумать контракты названий и манипулировать пакетно либо скриптами, либо в ручную, но осознанно меняя в определённых местах. Такие вещи на самом деле не так сложно читать на ревью в мерж реквестах, когда названия совпадают или имеют нечто общее. Так что разбор всего уж совсем на молекулы – это, как и в коде, излишняя декомпозиция, которая ведёт в будущем к неочевидным проблемам. Сущности должны быть разделены логически. И совсем базовые компоненты не должны пересекаться. Ну почти, но мы этого коснёмся чуть позже.

Из базовых элементов мы собрали всё, кроме “игрового предмета”.

Он аналогичен. Так сказать из того, что можно собрать на стоках, собрали для иллюстрации. Перед тем как начать собирать окна, немного ещё по базовым элементам. Базовые элементы интерфейса – это не эффекты или какие-то поведения на мой взгляд, чтобы с ними было удобно работать, а конкретные базовые сущности. Фоны, кнопки, прогресс бары для интерфейса. Персонажи, мечи, игровые объекты – которые могут повторяться и удобно редактировать пакетом. Основной плюс сборки сразу такого UI кита заключается в том, что дальше окна уже собираются довольно быстро, так как по сути это копирование и изменение значений, но основные ингредиенты окна уже собраны. Итак, начнём собирать окна.

Композиция или Nested Prefabs

Перед сборкой стоит рассказать про композицию и Nested Prefabs. В самой сборке нет ничего особо интересного, она скорее представлена для иллюстрации концепта. Префабы как сущность в движке обладают одной проблемой. Из-за того, как просто ими манипулировать, собирать и управлять, то многие очень халатно подходят к сборке и не учитывают насколько это важный элемент, который при правильном структурировании и аккуратной работе с ним может сэкономить в будущем уйму времени. По сути в Unity сейчас есть два механизма для работы с префабами композиция (Nested Prefabs) и наследование (Prefab Variance) и относится к ним нужно так же, как и к тем же механизмам в коде. Только с ещё с большей осторожностью, так как в префабах в принципе нет “защиты от дурака” Префаб просто позволяет определять View и делать биндинги без кода, но это всё ещё View. И всё ещё те же механизмы встречающиеся в разработке и их проблемы.

С композицией всё довольно просто. Она не всегда удобна, излишняя композиция ведёт к проблемам которые я описывал для базовых элементов и теней. То есть любой объект должен быть разбит на логические сущности. Если что-то присуще только этому окну – нет смысла выносить это в отдельный префаб. Самый простой способ определить это задать себе вопрос. Если я изменю этот элемент мне придётся менять это окно? Как можно заметить в базовых элементах у нас скажем не было заголовков окон. Если у окон нет некоей обобщённой вёрстки, то чаще всего мы не может рассуждать так:

“Итак, у нас есть заголовки. Хорошим тоном при работе шрифтов, что по всему приложению у нас есть несколько размеров шрифта и для заголовочных он свой. Поэтому вынесем это в префаб, чтобы менять размер шрифта по всему приложению для заголовков”

Идея, имеет место быть. Но в среднем по опыту такой подход ведёт к тому, что разработка узнаёт от тестеров о том, что “а вот тут сломался такой то экран, текст теперь залезает туда”. И это и есть излишняя декомпозиция. Всё зависит от конкретного случая, иногда окна скажем можно разбить на повторяющиеся виджеты, которые просто складываются друг на друга через horizontal layout, если дизайн такие молодцы и так сделали. Но это скорее исключение чем правило.

Соберём из наших компонент префаб окна награды за квест (я бы конечно ещё поиграл со шрифтами и хедером, но это только для статьи так что попрёт)

Получается такая композиция базовых элементов. Удобно, что если скажем у нас дизайн решит что кнопки подтверждения теперь должны быть оранжевыми их можно поменять везде через префаб, а если только в окне квестов, то зайти в префаб окна квеста и поменять там. При этом хочется обратить внимание на несколько моментов, которые я так же считаю весьма удобными.

Первое – это добавление в конец названий префаба предполагаемого действия. Это полезно в поиске, в авто-редактировании, в групповом редактировании объектов по принципу их действия и т.п. Тут можно завести удобный для себя контракт.

Второе – я специально на скриншотах захватываю весь экран, так как организация папок это важно. Не именно такая, каждому можно быть удобно своё в зависимости от контекста проекта. Но когда хорошая вложенность папок и всё логически разделено + панели отдельно от базовых элементов – это сильно упрощает навигацию в дальнейшем. Так же, как и смена стиля написания названий панелей (слонов) и базовых элементов (мелкими через дефис)

Третье – тут это не так хорошо видно, но организация папок с текстурами. Unity sprite atlas позволяет передавать папку в качестве параметра с текстурами. Поэтому если какие-то текстуры принадлежат какому-то игровому экрану, то лучше класть их в отдельную подпапку. Перед релизом игры может встать задача оптимизации интерфейсов. И тогда это так же сэкономит кучу времени, так как допустим одна из оптимизаций – это сгруппировать текстурные атласы по игровым экранам, чтобы уменьшить число draw call на интерфейс. Так как для того, чтобы интерфейс рисовался в скажем 1 dc одно из требований, чтобы все спрайты этого интерфейса лежали в одном атласе. Я в примере буду во всех экранах использовать одни и те же текстуры, так что у меня этого разделения нет.

Наследование или Prefab Variants

По своей сути же Prefab Variants – это наследование в префабах, которое позволяет расширять функционал наследников со всеми из этого вытекающими. Как базовая рекомендация в таком случае – не делать очень глубокую иерархию наследования. Если относится к префабам, как к коду, где всё довольно просто, чётко и иерархически, то все советы выполняются сами собой. Просто многие обращают на это недостаточно внимания и тратят уйму времени на поддержку подобных решений.

Соберём теперь окно для магазина:

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

Важно: для окна квеста мы создали новый вариант game-item-quest-reward и он унаследован от game-item, так же как и game-item-shop унаследован от game-item. Очень частая ошибка, что если делается первым скажем окно QuestPanel, то там остаётся базовый game-item, или получается цепочка наследования game-item->game-item-quest-reward->game-item-shop, что в свою очередь очень плохо с точки зрения проектировки. Так как игровой предмет магазина по логике не должен зависеть от предмета в окне награды за квест. Они могут опираться оба на один базовый, но ни в коем случае нельзя строить такую зависимость. Хотя интерфейс Unity к этому подталкивает.

И вот у нас появились префаб варианты. Вариант красной кнопки – это удобно, но не обязательно. Просто верстая много окон или собирая их под разные аспекты в адаптивной вёрстке, очень часто нужно использовать кнопки разных цветов. И поэтому чем каждый раз красить зелёную удобнее просто сделать вариант. По сути это отдельный логический объект (именно визуальный), так как это кнопка отмены. Для кнопки которая во всём интерфейсе встречается один раз я бы не стал делать отдельный вариант, а это достаточно типовое разделение.

Ещё стоит обратить внимание, что структурно фон карточки сейчас – это тот же фон окна. Но тогда почему это отдельный префаб? Потому что это отдельная логическая сущность никак не связанная с фоном окна, и не должна изменяться вместе с изменением фона окна. А почему это не вариант, как сделано с игровым предметом? Так можно сделать, тут уже вопрос к тому насколько вы считаете эти сущности разными. Я считаю это рискованным при горизонтальном масштабировании, так как когда таких сущностей не 2-3, а 20-30 трудно следить за их изменениями. А при этом для пакетной обработки можно пройтись по ним скриптом, либо руками.

В заключении

Надеюсь данные советы и рекомендации сделают ваш проект лучше и будут полезны. Я лишь обращаю внимание на то, что не стоит к префабам относится халатно, так как изначально хорошо организованная структура экономит уйму времени при разработке проекта в дальнейшем.

В разработке, и префабы не исключение, есть базовый конфликт. С одной стороны хочется, чтобы правки меняли только тот модуль, который исправляется. Это упрощает разработку и не вызывает неочевидных багов, когда правка касается только конкретного модуля. А с другой стороны хочется удобства, чтобы из-за “дублирования” не приходилось одно и тоже при ошибке менять в каждом месте всей системе. И любая разработка – это компромисс между этими двумя стульями.

В общем резюмируя:

Следите за названиями объектов

Не делайте слишком глубокую иерархию вариантов и разделяйте их логически

Для базовых элементов, виджетов собираемых в окно лучше использовать Nested Prefabs и композицию

Не обманывайтесь интерфейсом и простотой редактирования. За префабами надо следить не меньше чем за кодом

Собранные префабы вы найдёте в этом репозитории, где можно посмотреть на организацию. Спасибо за внимание!

Редактирование префаба в режиме префаба

Редактирование Prefab Тип ресурса, который позволяет хранить GameObject вместе с компонентами и свойствами. Префаб действует как шаблон, из которого вы можете создавать новые экземпляры объектов в сцене. Подробнее
Посмотрите в Словарь , откройте его в Готовый режим. Prefab Mode позволяет просматривать и редактировать содержимое Prefab Asset отдельно от любых других GameObjects фундаментальных объектов в сценах Unity, которые может представлять персонажей, реквизит, декорации, камеры, путевые точки и многое другое. Функциональность GameObject определяется прикрепленными к нему компонентами. Подробнее
См. Словарь в вашем Сцена Сцена содержит окружение и меню вашей игры. Думайте о каждом уникальном файле сцены как об уникальном уровне. В каждой сцене вы размещаете свое окружение, препятствия и декорации, по сути проектируя и создавая свою игру по частям. Подробнее
См. в Словарь . Изменения, которые вы вносите в Prefab Mode, влияют на все экземпляры этого Prefab.

Вход в режим Prefab и выход из него

Вы можете редактировать готовый объект изолированно или в контексте.

Изолировано: когда вы редактируете префаб изолированно, Unity скрывает остальную часть вашей текущей рабочей сцены, и вы видите только те игровые объекты, которые относятся к самому префабу (плюс, при необходимости, предварительно установленный среда редактирования — см. ниже).

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

Изолированное редактирование

Вы можете начать редактирование префаба в режиме префаба несколькими способами. Чтобы открыть Prefab Asset и отредактировать его изолированно, вы можете сделать это следующими способами:

  • Дважды щелкните Prefab Asset в окне проекта.
  • Выберите сборный ресурс в окне проекта окне, в котором отображается содержимое вашего Папка Assets (вкладка Project) Подробнее
    См. в Словарь и нажмите кнопку Открыть сборку Кнопка в Инспекторе окне Unity, в котором отображается информация о текущем выбранном игровом объекте, активе или настройках проекта. , что позволяет просматривать и редактировать значения. Подробнее
    См. в окне Словарь

Когда вы входите в режим Prefab изолированно, Unity показывает содержимое этого Prefab только в виде сцены An интерактивный взгляд на мир, который вы создаете. Вы используете Scene View для выбора и размещения пейзажей, персонажей, камер, источников света и всех других типов игровых объектов. Дополнительная информация
См. в Словарь
и в окне Иерархия. На следующем изображении корнем префаба является обычный GameObject — он не имеет синего значка экземпляра префаба.

Представление «Сцена» и иерархия с изолированным режимом PrefabПредставление «Сцена» и иерархия с изолированным режимом Prefab

В режиме Prefab в представлении Scene вверху отображается панель навигации. Самая правая запись — это открытый в данный момент Prefab. Используйте панель навигации, чтобы вернуться к основным сценам или другим готовым ресурсам, которые вы могли открыть.

Панель навигации в верхней части представления «Сцена», видимая в режиме Prefab.Панель навигации в верхней части представления «Сцена», видимая в режиме Prefab.

В окне Иерархия вверху отображается панель заголовка Prefab, которая показывает открытый в данный момент Prefab. Вы можете использовать стрелку назад в строке заголовка, чтобы вернуться на один шаг назад, что эквивалентно щелчку по предыдущей навигационной цепочке в навигационной цепочке в представлении «Сцена».

Стрелка назад в строке заголовка окна Hierarchy, видимая в Prefab ModeСтрелка назад в строке заголовка окна Hierarchy, видимая в Prefab Mode

Редактирование в контексте

Кроме того, вы можете открыть сборный ресурс в контексте через экземпляр этого сборного объекта. Способы сделать это включают:

  • Выберите экземпляр Prefab в окне Hierarchy и нажмите кнопку Открыть в окне Inspector.
  • Выберите экземпляр Prefab в окне Hierarchy и нажмите P на клавиатуре. Это привязка клавиатуры по умолчанию.
  • Используйте кнопку со стрелкой рядом с экземпляром Prefab в окне Hierarchy

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

  • Обычный – показывает контекст в обычных цветах.
  • Серый: контекст отображается в оттенках серого.
  • Скрытый – полностью скрывает контекст, чтобы был виден только контент Prefab.

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

В режиме Prefab в контексте Unity отображает содержимое Prefab в позиции, соответствующей позиции экземпляра Prefab, через который он был открыт. Это означает, что вы можете просмотреть корневое преобразование преобразование наверху иерархии преобразований. В префабе корневое преобразование является самым верхним преобразованием в префабе. В анимированном персонаже-гуманоиде корневое преобразование является проекцией преобразования тела на плоскость Y и вычисляется во время выполнения. В каждом кадре вычисляется изменение корневого преобразования, а затем оно применяется к игровому объекту, чтобы заставить его двигаться. Подробнее
См. в Словарь содержимого Prefab с другими значениями положения и поворота, чем у Prefab Актив действительно есть.

Вы не можете редактировать эти значения в Prefab Mode в контексте. Если вам нужно отредактировать их, вы можете либо открыть префаб изолированно, либо выбрать префаб-ассет в окне проекта и отредактировать значения в инспекторе.

Помимо корневых свойств Transform, вы также можете переопределить другие свойства экземпляра Prefab, что может кардинально изменить его внешний вид по сравнению с Prefab Asset, экземпляром которого он является. Чтобы предварительно просмотреть эти переопределенные значения из экземпляра Prefab, находясь в режиме Prefab в контексте, включите переключатель Показать переопределения на панели Prefab. Пока этот параметр включен, любые свойства, которые вы переопределяете в экземпляре Prefab, отображаются таким же образом в контекстах Prefab, и вы не можете их редактировать. Чтобы изменить эти свойства, снова отключите переключатель Показать переопределения.

Автосохранение

Режим Prefab имеет параметр Автосохранение в правом верхнем углу представления сцены. Когда он включен, Unity автоматически сохраняет любые изменения, которые вы вносите в Prefab, в Prefab Asset. Автосохранение включено по умолчанию.

Переключатель «Автосохранение» в правом верхнем углу представления «Сцена» в режиме «Сборный».Переключатель «Автосохранение» в правом верхнем углу представления «Сцена» в режиме «Сборный».

Если вы хотите внести изменения без автоматического сохранения этих изменений в предустановленном ресурсе, снимите флажок Автосохранение. В этом случае Unity спросит вас, хотите ли вы сохранить несохраненные изменения или нет, когда вы выходите из Prefab Mode для текущего Prefab. Если редактирование префаба в режиме префаба кажется медленным, может помочь отключение автоматического сохранения.

Переключение между изолированным и контекстным режимом

Когда вы открываете Prefab Mode через Prefab Asset, Unity отображает содержимое Prefab изолированно. Однако при открытии Prefab Mode через экземпляр Prefab в окне Hierarchy открывается Prefab Mode in Context.

Когда вы таким образом открываете Prefab Mode, вы можете видеть контекст экземпляра Prefab в представлении Scene, даже если вы редактируете не экземпляр, а сам Prefab Asset. Например, если вы открываете Prefab Mode в контексте через экземпляр Prefab в сцене, вы можете видеть окружение в этой сцене во время редактирования Prefab. Префаб также показан с теми же условиями освещения, что и в Сцене.

Префаб, открытый в режиме префабов в контексте, с окружающим контекстом, отображаемым в оттенках серого.Префаб, открытый в режиме префабов в контексте, с окружающим контекстом, отображаемым в оттенках серого.

Если у вас есть экземпляр Prefab, который вы не хотите открывать в контексте, а хотите открыть изолированно, удерживайте нажатой клавишу Alt и нажмите кнопку Открыть или кнопку со стрелкой, чтобы открыть Prefab Mode. Вы также можете настроить собственный ярлык в окне Ярлыки для команды Стадия > Редактировать префаб в изоляции.

Отменить

Когда вы вносите изменения в сборный ресурс в режиме сборки, вы можете отменить эти изменения только в режиме сборки. После того как вы выйдете из режима Prefab Mode для данного Prefab Asset, ваши изменения, относящиеся к этому Prefab Asset, больше не будут доступны в истории отмен.

Редактирование среды

Вы можете назначить сцену в качестве среды редактирования, которая будет использоваться в сборном режиме в изоляции. Это позволяет вам редактировать префаб на выбранном вами фоне, а не на пустой сцене. Это может быть полезно, чтобы увидеть, как ваш префаб выглядит на фоне выбранного вами пейзажа. Unity использует эту среду редактирования только тогда, когда вы открываете Prefab Mode в изоляции.

Вы не можете выбирать игровые объекты в сцене, которую вы назначаете в качестве среды редактирования в режиме Prefab Mode, и они не отображаются в иерархии. Это сделано для того, чтобы вы могли сосредоточиться на редактировании префаба, не выбирая случайно другие несвязанные игровые объекты и не загромождая окно иерархии.

Чтобы установить сцену в качестве среды редактирования, откройте окно Editor (верхнее меню : Edit > Project Settings, затем выберите категорию Editor) и перейдите в раздел Prefab Editing Environment. Используйте параметр Обычная среда для префабов, не связанных с пользовательским интерфейсом, и параметр Среда пользовательского интерфейса для префабов пользовательского интерфейса. Префабы пользовательского интерфейса — это те, которые имеют в корне компонент Rect Transform, а не обычный компонент Transform. компонент. Префабы «без пользовательского интерфейса» — это те, которые имеют обычный компонент Transform.

Настройки среды редактирования префабов в настройках проекта редактораНастройки среды редактирования префабов в настройках проекта редактора

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *