Объявление
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);
Параметры
original | Существующий объект, копию которого вы хотите сделать. |
position | Позиция для нового объекта. |
rotation | Ориентация нового объекта. |
parent | Родитель, который будет назначен новому объекту. |
instantiateInWorldSpace | Когда вы назначаете родительский объект, передайте значение true, чтобы расположить новый объект непосредственно в мировом пространстве. Передайте false, чтобы установить положение объекта относительно его нового родителя. |
Возвращает
Object Созданный клон.
Описание
Клонирует объект оригинал
и возвращает клон.
Эта функция создает копию объекта аналогично команде «Дублировать» в редакторе. Если вы клонируете GameObject, вы можете указать его положение и поворот (в противном случае по умолчанию используются положение и поворот исходного игрового объекта). Если вы клонируете Компонент, игровой объект, к которому он прикреплен, также клонируется, опять же с необязательным положением и поворотом.
При клонировании GameObject или Компонента все дочерние объекты и компоненты также клонируются с набором свойств, как у исходный объект.
По умолчанию родительский элемент нового объекта имеет значение null; это не «родной брат» оригинала. Однако вы все равно можете установить родителя, используя перегруженные методы. Если указан родитель, а положение и поворот не указаны, положение и поворот исходного объекта используются для локального положения и поворота клонированного объекта или его положения и поворота в мире, если instantiateInWorldSpace
параметр верный. Если положение и поворот указаны, они используются как положение и поворот объекта в мировом пространстве.
Активный статус игрового объекта во время клонирования сохраняется, поэтому, если оригинал неактивен, клон также создается в неактивном состоянии. Кроме того, для объекта и всех дочерних объектов в иерархии у каждого из их Monobehaviours и Component будут вызываться методы Awake и OnEnable, только если они активны в иерархии во время вызова этого метода.
Эти методы не создают готовое соединение с новым экземпляром объекта. Создание объектов со сборным подключением может быть достигнуто с помощью PrefabUtility.InstantiatePrefab.
Смотрите так же: Создание экземпляров префабов во время выполнения, PrefabUtility.InstantiatePrefab.
// Instantiates 10 copies of Prefab each 2 units apart from each other
using UnityEngine;
using System.Collections;
public class ExampleClass : MonoBehaviour
{
public Transform prefab;
void Start()
{
for (int 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);
}
}
}
Instantiate также может напрямую клонировать экземпляры скрипта. Будет клонирована вся иерархия игровых объектов, и будет возвращен клонированный экземпляр скрипта.
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 для установки свойств определенного компонента, присоединенного к клонированному объекту.
Объявление
public static T Instantiate(T original);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, Transform parent);
Параметры
original | Объект типа T, который вы хотите клонировать. |
Возвращает
T Объект типа Т.
Описание
Вы также можете использовать Generics для создания экземпляров объектов. Дополнительные сведения см. на странице Универсальные функции. подробности.
При использовании Generics нам не нужно приводить результат к определенному типу.
using UnityEngine;
public class Missile : MonoBehaviour
{
// ...other code...
}
public class InstantiateGenericsExample : MonoBehaviour
{
public Missile missile;
void Start()
{
Missile missileCopy = Instantiate(missile);
}
}