Skip to content

[Unity] 使用程式產生物件、刪除物件的方法

在使用 Unity 製作遊戲的過程中,我們自然無法透過拖曳來放置所有我們需要的物件;有時候我們需要在遊戲運行過程中,透過程式來自動產生物件、或是由程式來自動刪除物件。

今天我就簡單紀錄,在 Unity 當中該如何做到這兩件事。


事前準備

為了能夠使用程式產生物件,我們首先來配置按鈕。當按鈕按下的時候,我們所撰寫的產生物件程式便會執行。


與此同時,也將要產生的物件準備好,並將其放到 Resources 資料夾中(這個資料夾就先自己建立起來,名稱不能錯,因為這是 Unity 規範的產生資源專用資料夾)。同時,在場景中留下 targetParents 這個物件,等以下自動產生的物件將成為它的子物件。


產生物件

將以下 generateEvent.cs 腳本掛載在『產生物件的按鈕』上。

using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;


public class generateEvent : Button
{
    // Button is Pressed
    public override void OnPointerDown(PointerEventData eventData)
    {
        base.OnPointerDown(eventData);
    }

    // Button is released
    public override void OnPointerUp(PointerEventData eventData)
    {
        base.OnPointerUp(eventData);

        // Target
        Object targetObject = Resources.Load("targetObject");

        // Parent
        GameObject parentObject = GameObject.Find("targetParents");

        // Create
        Instantiate(
            targetObject,
            parentObject.transform.position,
            parentObject.transform.rotation,
            parentObject.transform
       );
    }
}


主要是使用 Instantiate() 來產生物件,需要放入的參數為:

Instantiate(
    想要產生的物件,
    想要產生的物件的位置,
    想要產生的物件的旋轉,
    想要產生的物件的父物件
)

刪除物件

deleteEvent.cs 掛載在刪除按鈕上。

using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;


public class deleteEvent : Button
{
    // Button is Pressed
    public override void OnPointerDown(PointerEventData eventData)
    {
        base.OnPointerDown(eventData);
    }

    // Button is released
    public override void OnPointerUp(PointerEventData eventData)
    {
        base.OnPointerUp(eventData);

        // Target
        GameObject targetObject = GameObject.Find("targetParents").transform.GetChild(0).gameObject;

        // Delete
        Destroy(targetObject);
    }
}



在程式碼中,我們首先找到 targetParents 物件底下的第一個子物件做刪除。刪除指令為:

Destroy(DELETE_GAMEOBJECT);

執行情況


References


Read More

Tags:

Leave a Reply