Unity 6.3
0 онлайн 67 гостей 3 в системе
Вход

Object.Instantiate

Declaration

public static Object Instantiate(Object original);
public static Object Instantiate(Object original, Transform parent);
public static Object Instantiate(Object original, Transform parent, bool instantiateInWorldSpace);
public static Object Instantiate(Object original, Vector3 position, Quaternion rotation);
public static Object Instantiate(Object original, Vector3 position, Quaternion rotation, Transform parent);

Параметры

Параметр Описание
первоначальный Существующий объект, копия которого должна быть создана.
должность Положение нового объекта.
ротация Ориентация нового объекта.
родитель Родитель, который будет назначен новому объекту.
instantiateInWorldSpace Когда вы назначаете родительский Объект, передайте true, чтобы расположить новый объект непосредственно в мировом пространстве. Передайте false, чтобы установить положение Объекта относительно его нового родителя.
параметры Структура, содержащая все параметры.

Возвращаемое значение

Объект Инстанциированный клон.

Описание

Клонирует объект original и возвращает клон.

Эта функция создает копию объекта в том же порядке, что и команда Дублировать в редакторе. Если вы клонируете объект GameObject вы можете указать его положение и вращение (по умолчанию это положение и вращение оригинального GameObject). Если вы клонируете Component GameObject, к которому она прикреплена, также клонируется, опять же с необязательным положением и вращением.

Когда вы клонируете GameObject или Component, все дочерние объекты и компоненты также клонируются с такими же свойствами, как и у первоначального объекта.

Примечание: Когда этот метод клонирует дочерний объект, он также клонирует собственные дочерние объекты этого дочернего объекта. Чтобы предотвратить переполнение стека, Unity ограничивает это вложенное клонирование. Если вы превышаете размер стека более чем наполовину, Unity бросает InsufficientExecutionStackException.

По умолчанию родитель Если родитель указан, но не указано ни положение, ни вращение, то для локального положения и вращения клонированного объекта используются положение и вращение первоначального объекта, или его мировое положение и вращение, если положение и вращение клонированного объекта не указаны. instantiateInWorldSpace параметр true. Если заданы положение и вращение, то они используются как положение и вращение объекта в мировом пространстве.

Активное состояние GameObject при клонировании сохраняется, поэтому, если оригинал неактивен, клон тоже создаётся неактивным. Кроме того, для объекта и всех дочерних объектов в иерархии методы Awake и OnEnable у каждого MonoBehaviour и компонента будут вызваны, только если они активны в иерархии на момент вызова этого метода.

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

Эти методы не создают соединение префаб с новым экземпляром объекта. Создание объектов с соединением префаб может быть достигнуто с помощью PrefabUtility.InstantiatePrefab.

Дополнительные ресурсы:

Создание экземпляра префабы во время выполнения
PrefabUtility.InstantiatePrefab

// Instantiates 10 copies of Prefab each 2 units apart from each other

using UnityEngine;

public class Example : MonoBehaviour { public GameObject prefab; void Start() { for (var i = 0; i < 10; i++) { Instantiate(prefab, new Vector3(i * 2.0f, 0, 0), Quaternion.identity); } } }

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

using UnityEngine;

// Instantiate a rigidbody then set the velocity

public class Example : MonoBehaviour { // Assign a Rigidbody component in the inspector to instantiate

public Rigidbody projectile;

void Update() { // Ctrl was pressed, launch a projectile if (Input.GetButtonDown("Fire1")) { // Instantiate the projectile at the position and rotation of this transform Rigidbody clone; clone = Instantiate(projectile, transform.position, transform.rotation);

// Give the cloned object an initial velocity along the current // object's Z axis clone.velocity = transform.TransformDirection(Vector3.forward * 10); } } }

Инстантизация может также клонировать экземпляры скриптов напрямую. Будет клонирована вся иерархия игровых объектов, и будет возвращен клонированный экземпляр скрипта.

using UnityEngine;
using System.Collections;

public class Missile : MonoBehaviour { public int timeoutDestructor;

// ...other code... }

public class ExampleClass : MonoBehaviour { // Instantiate a Prefab with an attached Missile script public Missile projectile;

void Update() { // Ctrl was pressed, launch a projectile if (Input.GetButtonDown("Fire1")) { // Instantiate the projectile at the position and rotation of this transform Missile clone = Instantiate(projectile, transform.position, transform.rotation);

// Set the missiles timeout destructor to 5 clone.timeoutDestructor = 5; } } }

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

using UnityEngine;

// Instantiate a Prefab as a child of another object.

public class Example : MonoBehaviour { // Assign a Prefab in the Inspector. public GameObject prefab;

// Assign the Transform to use as the parent in the Inspector. public Transform parent;

void Start() { // Instantiate the Prefab as a child of parent. // The clone keeps its local position and rotation relative to parent. Instantiate(prefab, parent);

// Pass true for instantiateInWorldSpace to keep the Prefab's // original world position and rotation instead. Instantiate(prefab, parent, true); } }

Чтобы перенести новый объект на другой объект, передайте Transform к Генеральной Ассамблее parent параметр. Используйте instantiateInWorldSpace параметр для управления тем, сохраняет ли клон свое положение относительно родителя или в мировом пространстве.

Declaration

public static T Instantiate(T original);
public static T Instantiate(T original, InstantiateParameters parameters);
public static T Instantiate(T original, Transform parent);
public static T Instantiate(T original, Transform parent, bool worldPositionStays);
public static T Instantiate(T original, Vector3 position, Quaternion rotation);
public static T Instantiate(T original, Vector3 position, Quaternion rotation, InstantiateParameters parameters);
public static T Instantiate(T original, Vector3 position, Quaternion rotation, Transform parent);

Параметры

Параметр Описание
первоначальный Объект типа T, который нужно клонировать.

Возвращаемое значение

T Объект типа T.

Описание

Вы также можете использовать Generics для создания экземпляров объектов. Подробнее см. на странице Generic Functions.

Используя Generics, нам не нужно передавать результат на определенный тип.

using UnityEngine;

public class Missile : MonoBehaviour { // ...other code... }

public class InstantiateGenericsExample : MonoBehaviour { public Missile missile;

void Start() { Missile missileCopy = Instantiate<Missile>(missile); } }