close

動態產生指定的物件,並放到指定的物件底下,同時也可以選擇是否幫該新增的物件增加或移除腳本。

 

若要動態產生指定的物件,最簡單的方法就是先建立好一個物件,再來用複製的方式複製給其他的物件(複製時,連該物件身上的腳本都會同時被複製,但是不會複製原先物件腳本身上的數值。簡單來說就是複製過去同時被初始化了)

 

可以和 這篇 一起服用~~

 

先建立一個Project,放上一個空的GameObject,並在這個空的GameObject上放置一個測試用的腳本,用來示範動態移除腳本的方式(當然也可以使用Prefabs)

 

DeleteScript為自行創建的C#腳本,什麼程式碼都沒寫,只是用來做示範動態移除腳本而已。

 

再來就是另外再新增兩個腳本

NullScript腳本顧名思義,就只是創出來,什麼程式碼都不去寫,用來示範動態增加腳本使用而已。

而Test腳本則是程式碼要編寫的地方

 

Test.cs程式碼如下


using UnityEngine;

public class Test : MonoBehaviour
{
    public GameObject copyGameObject;//要被複製的物件
    public GameObject superGameObject;//要被放置在哪個物件底下

    private GameObject childGameObject;//被複製出來的物件

    private void OnGUI()
    {
        if (GUILayout.Button("動態產生物件") == true)
        {
            childGameObject = Instantiate(copyGameObject);//複製copyGameObject物件(連同該物件身上的腳本一起複製)
            childGameObject.transform.parent = superGameObject.transform;//放到superGameObject物件內
            childGameObject.transform.localPosition = Vector3.zero;//複製出來的物件放置的座標為superGameObject物件內的原點
            childGameObject.AddComponent<NullScript>();//動態增加名為"NullScript"的腳本到此物件身上

            //下面這一行的功能為將複製出來的子物件命名為CopyObject

            //childGameObject.name = "CopyObject";



            //產生一個Object的物件,並指定子物件上要被刪除的腳本
            Object script = childGameObject.GetComponent<DeleteScript>();
            Destroy(script);//刪除腳本
        }
        if (GUILayout.Button("動態移除物件") == true)
        {
            Destroy(childGameObject);//刪除複製出來的子物件
        }
    }
}


 

之後將此程式碼拖曳到任一個物件上(但不可放到要被複製的物件身上)。

在此範例中我放到Camera上,並將GameObject拖曳到Copy Game Object上、Camera拖曳到Super Game Object上

 

然後按下執行!

 

當按下「動態產生物件」時,會在Camera內產生一個物件

 

而按下「動態移除物件」時,又恢復到原來的樣子

arrow
arrow
    全站熱搜

    Yang 發表在 痞客邦 留言(4) 人氣()