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);

Parameters

original要复制的现有对象。
position新对象的位置。
rotation新对象的方向。
parent将指定给新对象的父对象。
instantiateInWorldSpace要以指定父对象的方式保持该对象的世界位置(而不是相对于新父对象设置其位置),请传递 true。要相对于该对象的新父对象设置其位置,请传递 false。

Returns

Object 实例化的克隆对象。

Description

克隆 original 对象并返回克隆对象。

该函数以与 Editor 中的“Duplicate”命令类似的方式创建对象的副本。如果要克隆的是 GameObject,也可以选择指定其位置和旋转(否则,默认为原始 GameObject 的位置和旋转)。如果克隆的是 Component,也将克隆其附加到的 GameObject,此时也可指定可选的位置和旋转。

克隆 GameObjectComponent 时,也将克隆所有子对象和组件,它们的属性设置与原始对象相同。

默认情况下,新对象的父对象 将为 null,因此它与原始对象不“同级”。但是,您可以使用重载方法设置父对象。如果指定了父对象但未指定位置和旋转,则使用原始对象的位置和旋转作为克隆对象的本地位置和旋转;如果 instantiateInWorldSpace 参数为 true,则使用原始对象的世界位置和旋转。如果指定了位置和旋转,则使用它们作为该对象在世界空间中的位置和旋转。

克隆时将传递 GameObject 的激活状态,因此,如果原始对象处于非激活状态,则克隆对象也将创建为非激活状态。

另请参阅:关于预制件实例化的深入讨论

// 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); } } }

Instantiate 最常用于实例化飞弹、AI 敌人、粒子爆炸或毁坏对象替换。

using UnityEngine;

public class Example : MonoBehaviour { // Instantiate a rigidbody then set the velocity

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 = (Missile)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);

Parameters

original要克隆的类型为 T 的对象。

Returns

T 类型为 T 的对象。

Description

您还可以使用泛型来实例化对象。有关更多详细信息,请参阅泛型函数页面。

在该示例中,我们将再次实例化导弹对象,但由于使用了泛型,我们不需要转换结果:

using UnityEngine;

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

public class InstantiateGenericsExample : MonoBehaviour { public Missile missile;

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