Version: 2017.3

Object.Instantiate

切换到手册
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 实例化的克隆对象。

描述

克隆 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;
using System.Collections;

public class ExampleClass : MonoBehaviour { public Rigidbody projectile; void Update() { if (Input.GetButtonDown("Fire1")) { Rigidbody clone; clone = Instantiate(projectile, transform.position, transform.rotation) as Rigidbody; 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);

参数

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

返回

T 类型为 T 的对象。

描述

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

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

using UnityEngine;

public class InstantiateGenericsExample : MonoBehaviour { public Missile missile;

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