【Unity】Object.Instantiate

Unity 版本 5.6.x

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

Parameters 參數

參數 說明
original 一個物體,已經存在的(比如一個prefab),你想實例化它的一個複製
position 要生成的新物體的Position屬性
rotation 要生成的新物體的Rotation屬性
parent 這個新物體的父級
instantiateInWorldSpace 如果是true的話,新的物體的座標將保持爲世界座標。爲false的話,新物體的座標將附着於其父物體(即局部座標)。

Returns 返回值

返回你想實例化的那個物體的克隆。

Description 描述

original 物體進行克隆,並返回這個克隆的新物體。

這個方法對物體進行克隆,就像在編輯器裏直接對物體進行 Duplicate 即複製操作一樣。如果你克隆的是一個 GameObject ,你可以選擇性地設置它的 position 和 rotation(默認使用這個原始 GameObject 的 position 和 rotation)。如果你克隆的是一個 Component ,那麼它所附屬於的 GameObject 也會被克隆,並且同樣的你可以選擇性的設置它的屬性。

當你克隆一個 GameObject 或者 Component 時,它的所有子物體以及組件也會被克隆,並且與元物體屬性一致。

新的克隆出的物體默認是沒有父級物體的,所以它不會是元物體的“sibling”即兄弟物體。然而,你仍然可以使用重載方法中的一種對新物體指定其父物體。如果指定了父物體,且同時沒有指定 rotation 和 positon的話,元物體的 rotation 和 position 就將是新物體的局部 rotation 和 position(但若 instantiateInWorldSpace 爲 true 的話,將會是新物體的世界 rotation 和 position。)

如果元物體的狀態是 inactive,則新物體的狀態也將是 inactive。

// 實例化 10 個該 prefab 的克隆,每兩個之間都間隔一定的距離。

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 方法也可以直接克隆腳本(script)實例。整個物體的 Hierarchy 將會被克隆,且克隆的腳本實例將被返回。

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 方法來爲克隆後的物體設置屬性。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章