Last Updated on 2021-10-28 by Clay
在使用 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
- https://docs.unity3d.com/ScriptReference/Resources.Load.html
- https://docs.unity3d.com/2018.3/Documentation/ScriptReference/UI.Button.html
- https://docs.unity3d.com/ScriptReference/Object.Destroy.html