Префаб юнити что это

Префабы (Prefabs)

Префаб юнити что это

Unity’s Prefab system allows you to create, configure, and store a GameObject complete with all its components, property values, and child GameObjects as a reusable Asset. The Prefab Asset acts as a template from which you can create new Prefab instances in the Scene.

When you want to reuse a GameObject configured in a particular way – like a non-player character (NPC), prop or piece of scenery – in multiple places in your Scene, or across multiple Scenes in your Project, you should convert it to a Prefab. This is better than simply copying and pasting the GameObject, because the Prefab system allows you to automatically keep all the copies in sync.

Any edits that you make to a Prefab Asset are automatically reflected in the instances of that Prefab, allowing you to easily make broad changes across your whole Project without having to repeatedly make the same edit to every copy of the Asset.

You can nest Prefabs inside other Prefabs to create complex hierachies of objects that are easy to edit at multiple levels.

However, this does not mean all Prefab instances have to be identical. You can override settings on individual prefab instances if you want some instances of a Prefab to differ from others. You can also create variants of Prefabs which allow you to group a set of overrides together into a meaningful variation of a Prefab.

Some common examples of Prefab use include:

2018–07–31 Page amended

Источник

Префабы (Prefabs)

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

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

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

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

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

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

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

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

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

Источник

Префабы (Prefabs)

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

Fortunately, Unity has a Prefab asset type that allows you to store a GameObject object complete with components and properties. The prefab acts as a template from which you can create new object instances in the scene. Any edits made to a prefab asset are immediately reflected in all instances produced from it but you can also override components and settings for each instance individually.

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

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

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

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

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

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

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

The Select button selects the prefab asset from which the instance was generated. This allows you to edit the main prefab and thereby change all its instances. However, you can also save overridden values from an instance back to the originating prefab using the Apply button (modified Transform position values are excluded for obvious reasons). This effectively lets you edit all instances (except those which override the value changed) via any single instance and is a very quick and convenient way to make global changes. If you experiment with overriding properties but then decide you preferred the default values, you can use the Revert button to realign the instance with its prefab.

Источник

Instantiating Prefabs at run time

Prefabs come in very handy when you want to instantiate complicated GameObjects or collections of GameObjects at run time. Compared with creating GameObjects from scratch using code, instantiating Prefabs using code has many advantages because you can:

Instantiate a Prefab using one line of code. Creating equivalent GameObjects from scratch requires many more lines of code.

Set up, test, and modify the Prefab quickly and easily using the Scene view, Hierarchy and Inspector.

Change which Prefab is instantiated without changing the code. You can make a simple rocket into a super-charged rocket, without any code changes.

Note: You can download a Unity Project containing all the examples on this page, here:

Basics of instantiating a Prefab

To instantiate a Prefab at run time, your code needs a reference to that Prefab. You can make this reference by creating a public variable in your code to hold the Prefab reference. The public variable in your code appears as an assignable field in the Inspector. You can then assign the actual Prefab you want to use in the Inspector.

The script example below has a single public variable, “myPrefab”, that is a reference to a Prefab. It creates an instance of that Prefab in the Start() method.

Чтобы использовать этот пример:

Create a new C# script in your Project, and name it “InstantiationExample”.

Copy and paste in the script example above into your new script, and save it.

Create an empty GameObject using the menu GameObject > Create Empty.

Add the script to the new GameObject as a component by dragging it onto the empty GameObject.

Create any Prefab, and drag it from the Project window into the My Prefab field in the script component.

Префаб юнити что этоDragging a Prefab from the Project window into the My Prefab field in the script component

When you start Play Mode, you should see your Prefab instantiate at position (0, 0, 0) in the Scene.

You can drag a different Prefab into the My Prefab field in the Inspector to change which Prefab is instantiated, without having to change the script.

Because this first example is very simple, it may not seem to provide any advantage over just placing a Prefab into the Scene yourself. However, being able to instantiate Prefabs using code provides you with powerful abilities to dynamically create complex configurations of GameObjects while your game or app is running, as shown in the following examples.

Common scenarios

To illustrate the strength of instantiating Prefabs at run time, here are some basic situations where they are useful:

Building a structure out of a single Prefab by replicating it multiple times in different positions, for example in a grid or circle formation.

Firing a projectile Prefab from a launcher. The projectile Prefab could be a complex configuration containing a Mesh, Rigidbody, Collider, AudioSource, Dynamic Light, and a child GameObject with its own trail Particle System.

A vehicle, building or character, for example a robot, breaking apart into many pieces. In this scenario, the example script deletes and replaces the complete, operational robot Prefab with a wrecked robot Prefab. This wrecked Prefab consists of separate broken parts of the robot, each set up with Rigidbodies and Particle Systems of their own. This technique allows you to blow up a robot into many pieces, with just one line of code, which replaces the original GameObject with a wrecked Prefab.

The following sections show you how to implement these scenarios.

Building a structure

You can use code to create many copies of a Prefab in a particular configuration almost instantaneously. Using code to generate structures like this is called procedural generation. The example below creates a wall of block instances.

To try this example, create the script below, name it Wall, and place it on an empty GameObject in your Scene.

When you have done this, you should see the Block variable in the Inspector, with the word None in the field. A value of “None” means that no Prefab has been assigned to this variable yet.

Префаб юнити что этоThe Block variable, with no Prefab assigned yet

The example script above won’t work until you assign a Prefab to the Block variable. To create a simple block Prefab:

Choose GameObject > 3D Object > Cube.

Drag the cube from the Hierarchy window into the Assets folder in the Project window. This creates a Prefab Asset.

Rename your Prefab to “Block”.

Now that your Block Prefab exists as an Asset, you can safely delete the cube from your Hierarchy.

Now that you have created a Block Prefab, you can assign it to the Block variable. Select your original GameObject (the one with the “Wall” script attached to it). Then drag the “Block” Prefab from the Project window into the “Block” variable slot (where it says “None”).

Префаб юнити что этоThe Block variable, with the Block Prefab assigned to it

When you have finished this set-up, click Play and you’ll see that Unity builds the wall using the Prefab:

Префаб юнити что этоA wall built from 4 rows of 10 blocks, as generated by the example above.

This is a flexible workflow pattern that you can use over and over again in Unity. Because you are using a Prefab in this script, you can easily replace or edit the Prefab to modify the properties of the bricks in the wall, without needing to touch the script. You can also use your Wall script on other GameObjects in your Scene with different Prefabs assigned to them to have various walls made from different types of Prefab.

You can use code to place a GameObject in a grid, in circle pattern, randomly scattered, or any other configurations that you can think of to fit whatever game or app you are creating. Here’s another example showing how to place instances in a circular formation:

Префаб юнити что этоA circular arrangement of blocks, as generated by the example above

Instantiating projectiles & explosions

A “Launcher” GameObject instantiates a projectile Prefab when the player presses the fire button. The Prefab contains a mesh, a Rigidbody, and a Collider, so it can fly through the air and detect when a collision occurs.

The projectile collides with something and instantiates an explosion Prefab. The explosion Prefab contains a Particle System effect and a script that applies a force to surrounding GameObjects.

In the same way as the Block Prefab above, you can instantiate the projectile in just one line of code, no matter how complex the projectile Prefab is. After instantiating the Prefab, you can also modify any properties of the instantiated GameObject. For example, you can set the velocity of the projectile’s Rigidbody.

As well as being easier to use, you can modify the Prefab later on without touching the code. So if your projectile is a rocket, later on you could add a Particle System to it to make it leave a cloud trail. After you do this, all your instantiated rockets have particle trails.

This script shows how to launch a projectile using the Instantiate() function.

In the code, the Prefab variable type is a Rigidbody, and not GameObject. This has two useful effects:

Only GameObjects that have a Rigidbody component can be assigned to this variable. This is useful because it helps make sure you’re assigning the correct GameObject to the variable.

The Instantiate method returns a reference to the Rigidbody component on the new instance. This is useful because it makes it simple to set the velocity of the Rigidbody immediately after instantiating it.

When making a public Prefab variable, the variable type can be a GameObject, or it can be any valid Component type (either a built-in Unity component or one of your own MonoBehaviour script).

For GameObject type variables, you can assign any GameObject to the variable, and the Instantiate function returns a reference to the new GameObject instance.

For component type variables (such as Rigidbody, Collider, and Light), you can only assign GameObjects of that component type to the variable, and the Instantiate function returns a reference to that specific component on the new GameObject instance.

The following script (placed on the projectile Prefab) performs the action of instantiating the explosion at the projectile’s current position and removing the projectile GameObject when the projectile collides with something.

Префаб юнити что этоAn example of projectile Prefabs being instantiated, and replaced with explosion Prefabs when they impact

Notice in the image above, which shows the scripts running in Play mode, the instantiated GameObjects appear in the Hierarchy, with the word “(Clone)” appended to the name.

Replacing a character with a ragdoll or wreck

Often in games, you might want to switch a character, vehicle, building or other Asset from an “intact” state to a “destroyed” state. Rather than trying to modify the intact version of the GameObject (such as removing scripts, adding Rigidbody components and so on), it’s often much more efficient and effective to delete the entire intact GameObject and replace it with an instantiated destroyed Prefab. This gives you a lot of flexibility. You could use a different Material for the destroyed version, attach completely different scripts, or instantiate a Prefab containing the GameObject broken into many pieces to simulate a wrecked and shattered version of the original GameObject. Any of these options can be achieved with a single call to Instantiate(), to bring your destroyed version into the Scene, while deleting the original.

Most importantly, you can create the destroyed version which you Instantiate() with completely different GameObjects compared to the original. For example, to create a breakable robot, you would model two versions: one that consists of a single GameObject with Mesh Renderer

and scripts for robot movement, and the other that consists of several skeletal parts that can be controlled individually by physics. Your game runs faster when using the model with just one GameObject, because the model contains fewer triangles and so it renders faster than the robot that has many small parts. Also while your robot is happily walking around, there is no reason to have it in separate parts.

To build a wrecked robot Prefab, you could:

Model your robot with lots of different skeletal parts in your favorite 3D modeling software, and export it into the Assets folder of your Unity Project.

Create an empty Scene in the Unity Editor.

Drag the model from the Project window into the empty Scene.

Add Rigidbodies to all parts, by selecting all the parts and choosing Component > Physics > Rigidbody.

Add Colliders to all parts by selecting all the parts and choosing Component > Physics > Mesh Collider (enable the Convex option for faster performance).

Make sure you parent all the parts of your wrecked robot to a single root GameObject.

For an extra special effect, add a smoke-like Particle System as a child GameObject to each of the parts.

Now you have a robot with multiple explodable parts. The parts can fall to the ground because they are controlled by physics, and each part creates a Particle trail due to the attached Particle System.

Click Play to preview how your model reacts, and make any necessary tweaks.

Drag the root GameObject into the Assets folder in the Project window to create a new Prefab.

The following example shows how you can model these steps in code.

Префаб юнити что этоAn example of a robot Prefab being swapped for a wrecked Prefab when hit by a projectile

Источник

Улучшение работы с префабами

В версии 2018.3 мы улучшили процесс работы с префабами, включая вложенные префабы, варианты префабов и режим префабов.

Префаб юнити что это

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

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

Префаб юнити что это

Повышенная гибкость

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

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

Повышение продуктивности

Это облегчает следующие задачи для команд любых размеров:

Префаб юнити что это

Гибкие возможности повышают эффективность

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

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

Префаб юнити что это

Избегайте отнимающих время ошибок

Основа новых рабочих процессов — режим префабов — позволяет вам редактировать префабы отдельно от остального проекта.

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

Префаб юнити что это

Узнайте, как члены команды Unity R&D Николин Ог и Стин Кьерболл отправились на поиски открытий: проведя тесты, опросы и пообщавшись напрямую со 150 клиентами, они собрали ценные данные, которые помогли фундаментальным образом улучшить процессы работы с префабами.

Смотрите наши официальные доклады на Unite и GDC

Префаб юнити что это

GDC 2019 — представляем новый процесс работы с префабами

Запись краткого доклада с GDC 2019, где мы в общем рассказываем о префабах в Unity 2019. Технический евангелист Чиро Континисио (Ciro Continisio) расскажет об основных особенностях новых методов организации префабов (например, вложении, вариации и режиме редактирования с изоляцией префаба). Кроме того, он расскажет о новых элементах интерфейса и об их смысле.

Префаб юнити что это

Unite LA 2018 — Представляем новый процесс работы с префабами

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

Префаб юнити что это

Unite LA 2018 — Улучшение процессов работы с префабами: Новый способ работы с префабами

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

Префаб юнити что это

Unite LA 2018 — Улучшение процессов работы с префабами для интерфейсов: Новый способ работы с префабами

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

Префаб юнити что это

Unite Berlin 2018 — Улучшение процессов работы с префабами

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

Префаб юнити что это

Unite Berlin 2018 — Технические детали новой системы префабов

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

Префаб юнити что это

О планах развития на Unite Berlin 2018

Узнайте о планах Unity по выпуску новых функций и улучшений в цикле 2018 года. От Next-Level Rendering до системе задач C#, машинного обучения, новых платформ и многого другого. Вы узнаете, когда можно ожидать добавления новых возможностей и функционала, а также сможете задать вопросы.

Источник

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

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