版本: Unity 6 (6000.0)
语言English
  • C#

Object.Instantiate

建议更改

成功!

感谢您帮助我们提高 Unity 文档的质量。虽然我们无法接受所有提交,但我们确实会阅读用户提出的每项更改建议,并在适用的情况下进行更新。

关闭

提交失败

由于某些原因,您的更改建议无法提交。请<a>稍后再试</a>。感谢您抽出时间帮助我们提高 Unity 文档的质量。

关闭

取消

切换到手册

声明

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 新对象的 position。
rotation 新对象的 orientation。
parent 将分配给新对象的父对象。
instantiateInWorldSpace 当您分配父对象时,传递 true 以将新对象直接放置在世界空间中。传递 false 以相对于其新父对象设置对象的 position。

返回值

Object 实例化的克隆。

描述

克隆对象 original 并返回克隆。

此函数以类似于编辑器中“复制”命令的方式复制对象。如果您正在克隆 GameObject,您可以指定其 position 和 rotation(否则这些默认为原始 GameObject 的 position 和 rotation)。如果您正在克隆 Component,则其所附加的 GameObject 也将被克隆,同样可以选择 position 和 rotation。

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

注意:当此方法克隆子对象时,它也会克隆子对象自己的子对象。为了防止堆栈溢出,Unity 限制了此嵌套克隆。如果您超过堆栈大小的一半,Unity 将抛出 InsufficientExecutionStackException

默认情况下,新对象的 parent 为 null;它不是原始对象的“同级”。但是,您仍然可以使用重载方法设置 parent。如果指定了 parent 但未指定 position 和 rotation,则原始对象的 position 和 rotation 将用于克隆对象的本地 position 和 rotation,或者如果 instantiateInWorldSpace 参数为 true,则使用其世界 position 和 rotation。如果指定了 position 和 rotation,则它们将用作对象在世界空间中的 position 和 rotation。

克隆时 GameObject 的活动状态将保持不变,因此如果原始对象处于非活动状态,则克隆也将在非活动状态下创建。此外,对于层次结构中的对象和所有子对象,只有当它们在调用此方法时处于层次结构的活动状态时,它们的 Monobehaviours 和 Components 才会分别调用其 Awake 和 OnEnable 方法。

这些方法不会为新实例化的对象创建预制件连接。可以使用 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); } } }

Instantiate 可用于在运行时创建新对象。例如,用于弹丸的对象或用于爆炸效果的粒子系统。

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 类型为 T 的对象。

描述

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

通过使用泛型,我们无需将结果强制转换为特定类型。

using UnityEngine;

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

public class InstantiateGenericsExample : MonoBehaviour { public Missile missile;

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