Object.Instantiate
Успех!
Благодарим вас за то, что вы помогаете нам улучшить качество документации по Unity. Однако, мы не можем принять любой перевод. Мы проверяем каждый предложенный вами вариант перевода и принимаем его только если он соответствует оригиналу.
Ошибка внесения изменений
По определённым причинам предложенный вами перевод не может быть принят. Пожалуйста попробуйте снова через пару минут. И выражаем вам свою благодарность за то, что вы уделяете время, чтобы улучшить документацию по Unity.
Параметры
| original | An existing object that you want to make a copy of. |
| position | Position for the new object (default Vector3.zero). |
| rotation | Orientation of the new object (default Quaternion.identity). |
Возврат значений
Object A clone of the original object.
Описание
This function makes a clone of an object in a similar way to the Duplicate command in the editor. If you are cloning a GameObject, or something attached to a GameObject, then you can also optionally specify its position and rotation.
If you are cloning a Component, then the GameObject it is attached to will also be cloned.
When you clone a GameObject or Component, all child objects and components will also be cloned, along with their properties. However, the parent property of the cloned object will be null, so it will not be part of the object hierarchy of the original.
The active status of a GameObject at the time of cloning will be passed, so if the original is inactive then the clone will be created in an inactive state too.
For an in-depth tutorial of Instantiate and its uses, visit: In depth Prefab Instantiate discussion.
In this example, we instantiate 10 copies of a prefab object in a line along the x axis.
Instantiate can also clone script instances directly. The game object hierarchy will be cloned and the cloned script instance will be returned.
After cloning an object you can also use GetComponent to set properties on a specific component attached to the cloned object.
Object.Instantiate
Success!
Thank you for helping us improve the quality of Unity Documentation. Although we cannot accept all submissions, we do read each suggested change from our users and will make updates where applicable.
Submission failed
For some reason your suggested change could not be submitted. Please try again in a few minutes. And thank you for taking the time to help us improve the quality of Unity Documentation.
Declaration
Declaration
Declaration
Declaration
Declaration
Parameters
| original | An existing object that you want to make a copy of. |
| position | Position for the new object. |
| rotation | Orientation of the new object. |
| parent | Parent that will be assigned to the new object. |
| instantiateInWorldSpace | When you assign a parent Object, pass true to position the new object directly in world space. Pass false to set the Object’s position relative to its new parent.. |
Returns
Object The instantiated clone.
Description
Clones the object original and returns the clone.
This function makes a copy of an object in a similar way to the Duplicate command in the editor. If you are cloning a GameObject you can specify its position and rotation (these default to the original GameObject’s position and rotation otherwise). If you are cloning a Component the GameObject it is attached to is also cloned, again with an optional position and rotation.
When you clone a GameObject or Component, all child objects and components are also cloned with their properties set like those of the original object.
By default the parent of the new object is null; it is not a «sibling» of the original. However, you can still set the parent using the overloaded methods. If a parent is specified and no position and rotation are specified, the original object’s position and rotation are used for the cloned object’s local position and rotation, or its world position and rotation if the instantiateInWorldSpace parameter is true. If the position and rotation are specified, they are used as the object’s position and rotation in world space.
The active status of a GameObject at the time of cloning is maintained, so if the original is inactive the clone is created in an inactive state too. Additionally for the object and all child objects in the hierarchy, each of their Monobehaviours and Components will have their Awake and OnEnable methods called only if they are active in the hierarchy at the time of this method call.
These methods do not create a prefab connection to the new instantiated object. Creating objects with a prefab connection can be achieved using PrefabUtility.InstantiatePrefab.
Instantiate can be used to create new objects at runtime. Examples include objects used for projectiles, or particle systems for explosion effects.
Instantiate can also clone script instances directly. The entire game object hierarchy will be cloned and the cloned script instance will be returned.
After cloning an object you can also use GetComponent to set properties on a specific component attached to the cloned object.
Network Instantiate
(For new projects, you should use the new networking system introduced in 5.1. This information is for legacy projects using the old networking system.)
Функция Network.Instantiate обеспечивает простой способ создания экземпляра префаба на всех клиентах, по эффекту схожий с Object.Instantiate для одного клиента. Создающий клиент будет контролировать объект (т.е. класс ввода Input будет доступен из скриптов, запущенных на экземпляре клиента), но изменения будут отображаться по всей сети.
Список аргументов для Network.Instantiate() :
Как и с Object.Instantiate, первые три параметра описывают создающийся префаб с его желаемой позицией position и вращением rotation. Параметр group (группа) позволяет определять подгруппы объектов, чтобы контролировать фильтрацию сообщений и может быть выставлен равным нулю, если фильтрации не требуется (см.ниже Communication Groups).
Технические детали
Если расписать подробно, что в действительности происходит, то выяснится, что создание объектов по сети строится вокруг вызова RPC, содержащего идентификатор для префаба вместе с позицией и другими деталями. Этот вызов RPC всегда помещается в буфер, подобно иным вызовам RPC, так что созданные объекты появятся и у новых клиентов, когда они подключатся. См. страницу RPC для большей информации о буферизации.
Communication Groups
Communication groups (Коммуникационные группы) могут быть использованы для выбора клиентов, которые будут получать индивидуальные сообщения. Например, два подключенных игрока могут находиться в различных областях игрового мира и даже не иметь возможности встретиться. Следовательно, нет никакого смысла в передаче состояния игры между клиентами этих двух игроков, однако вам всё ещё может быть необходима возможность создания чата между ними. В этом случае, сетевое создание новых объектов не требуется передавать для объектов, определяющих ход игры, но не для объектов, осуществляющих функцию чата, поэтому их следует поместить в различные группы.
Object.Instantiate
Parameters
| original | An existing object that you want to make a copy of. |
| position | Position for the new object. |
| rotation | Orientation of the new object. |
| parent | Parent that will be assigned to the new object. |
| instantiateInWorldSpace | When you assign a parent Object, pass true to position the new object directly in world space. Pass false to set the Object’s position relative to its new parent.. |
Returns
Object The instantiated clone.
Description
Clones the object original and returns the clone.
This function makes a copy of an object in a similar way to the Duplicate command in the editor. If you are cloning a GameObject you can specify its position and rotation (these default to the original GameObject’s position and rotation otherwise). If you are cloning a Component the GameObject it is attached to is also cloned, again with an optional position and rotation.
When you clone a GameObject or Component, all child objects and components are also cloned with their properties set like those of the original object.
By default the parent of the new object is null; it is not a «sibling» of the original. However, you can still set the parent using the overloaded methods. If a parent is specified and no position and rotation are specified, the original object’s position and rotation are used for the cloned object’s local position and rotation, or its world position and rotation if the instantiateInWorldSpace parameter is true. If the position and rotation are specified, they are used as the object’s position and rotation in world space.
The active status of a GameObject at the time of cloning is maintained, so if the original is inactive the clone is created in an inactive state too. Additionally for the object and all child objects in the hierarchy, each of their Monobehaviours and Components will have their Awake and OnEnable methods called only if they are active in the hierarchy at the time of this method call.
These methods do not create a prefab connection to the new instantiated object. Creating objects with a prefab connection can be achieved using PrefabUtility.InstantiatePrefab.
Instantiate can be used to create new objects at runtime. Examples include objects used for projectiles, or particle systems for explosion effects.
Instantiate can also clone script instances directly. The entire game object hierarchy will be cloned and the cloned script instance will be returned.
After cloning an object you can also use GetComponent to set properties on a specific component attached to the cloned object.
Parameters
Returns
T Object of type T.
Description
Дженерик функции. Для получения дополнительной информации смотрите страницу, посвященную Дженерик функциям.
By using Generics we don’t need to cast the result to a specific type.
Создание экземпляров префабов во время работы приложения
Префабы приходятся очень кстати, когда вы хотите создать экземпляры сложных игровых объектов во время игрового процесса. Альтернативой создания экземпляров префабов является создание GameObject с нуля используя код. Создание экземпляра префаба имеет много преимуществ над альтернативным подходом:
Общие сценарии
Чтобы показать мощь префабов, давайте рассмотрим некоторые основные ситуации, где они могут пригодиться:
Построение стены
Это объяснение иллюстрирует преимущества использования префабов над созданием объектов из кода.
В первую очередь, давайте построим стену из кода:
Если вы создадите префаб и выполните все установки вручную, то вам понадобится использовать лишь по одной строке на создание и установку каждого кирпича. Это освобождает вас от поддержания и изменения тонн кода, когда вы хотите внести изменения. При использовании префаба вы просто вносите изменения в него и жмёте Play. Совсем нет надобности изменять код.
Если вы используете префаб для каждого кирпича, то вот код, который вам понадобится для создания стены.
Он не только очень чистый, но им можно пользоваться много раз. В нём не упоминается ни создание куба, ни то, что он должен содержать Rigidbody. Всё это задано в префабе, который может быть быстро создан в редакторе
Теперь нам остаётся лишь создать префаб, который мы делаем в редакторе. Вот так:
Мы создали наш префаб кирпича, так что теперь надо присоединить переменную brick к нашему скрипту. Когда вы выбираете пустой GameObject, что содержит скрипт, переменная brick будет видна в инспекторе.
Теперь перетащите префаб “Brick” из окна Project View на переменную brick в инспекторе. Нажмите Play и вы увидите стену построенную из префабов.
Этот шаблон рабочего процесса можно использовать и использовать в Unity. В начале вы, возможно, будете интересоваться, почему же это лучше, чем создание куба из кода, который длиннее лишь на две строки.
Но т.к. вы сейчас используете префаб, вы можете настроить Prefab за секунды. Хотите внести изменения для всей кучи образцов? Настройте Rigidbody в префабе всего один раз. Хотите использовать иной Material для всех образцов? Перетащите материал на префаб всего один раз. Хотите изменить трение? Используйте другой физический материал ( Physic Material ) в коллайдере префаба. Хотите добавить системы частиц ко всем кирпичам? Добавьте дочернюю систему к префабу всего один раз.
Создание экземпляров ракет и взрывов
Вот как префабы подходят для данного сценария:
В то время как можно собрать объект ракеты полностью из кода, вручную добавляя компоненты и устанавливая свойства, было бы гораздо проще просто создать экземпляр префаба. Вы можете создать экземпляр ракеты просто одной строкой кода, не важно, насколько сложным будет префаб ракеты. После создания экземпляра префаба, вы также можете изменить любые свойства созданного экземпляра объекта (например, вы можете установить скорость Rigidbody ракеты).
Замена персонажа на Ragdoll или обломки
Допустим у вас есть вражеский персонаж с ригом и он умирает. Вы можете просто проиграть анимацию смерти и отключить все скрипты, которые обычно отвечают за логику врага. Вам, скорее всего, придётся позаботиться об удалении нескольких скриптов, добавлении некоторой дополнительной логики, чтобы убедиться, что никто не будет атаковать уже мёртвого врага, и о других задачах очистки.
Гораздо лучше будет подход, включающий мгновенное удаление всего персонажа, и замена его созданным экземпляром префаба обломков. Это даёт вам больше возможностей. Вы можете использовать другой материал для мёртвого персонажа, присоединить совершенно другие скрипты, создать экземпляр префаба содержащий объект сломанный на много кусков, чтобы симулировать разбившегося врага, или просто создать экземпляр префаба, содержащий определённую версию персонажа.
Это стандартные шаги, если надо собрать префаб сломанного самолёта:
Следующий пример покажет, как эти шаги моделируются в коде.
Размещение группы объектов по заданному шаблону
Допустим вы хотите поместить группу объектов по сетке или кругу. Как всегда, это может быть выполнено двумя способами:
Так используйте вместо этого Instantiate() с префабом! Мы думаем, что вы уже поняли нашу идею, почему префабы так удобны в этих случаях. Вот необходимый для этих сценариев код:



