original | 要复制的现有对象。 |
position | 新对象的位置。 |
rotation | 新对象的方向。 |
parent | 将指定给新对象的父对象。 |
instantiateInWorldSpace | 要以指定父对象的方式保持该对象的世界位置(而不是相对于新父对象设置其位置),请传递 true。要相对于该对象的新父对象设置其位置,请传递 false。 |
Object 实例化的克隆对象。
克隆 original
对象并返回克隆对象。
该函数以与 Editor 中的“Duplicate”命令类似的方式创建对象的副本。如果要克隆的是 GameObject,也可以选择指定其位置和旋转(否则,默认为原始 GameObject 的位置和旋转)。如果克隆的是 Component,也将克隆其附加到的 GameObject,此时也可指定可选的位置和旋转。
克隆 GameObject 或 Component 时,也将克隆所有子对象和组件,它们的属性设置与原始对象相同。
默认情况下,新对象的父对象 将为 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 设置附加到克隆对象的特定组件的属性。
original | 要克隆的类型为 T 的对象。 |
T 类型为 T 的对象。
您还可以使用泛型来实例化对象。有关更多详细信息,请参阅泛型函数页面。
在该示例中,我们将再次实例化导弹对象,但由于使用了泛型,我们不需要转换结果:
using UnityEngine;
public class Missile : MonoBehaviour { // ...other code... }
public class InstantiateGenericsExample : MonoBehaviour { public Missile missile;
void Start() { Missile missileCopy = Instantiate<Missile>(missile); } }