動態產生指定的物件,並放到指定的物件底下,同時也可以選擇是否幫該新增的物件增加或移除腳本。
若要動態產生指定的物件,最簡單的方法就是先建立好一個物件,再來用複製的方式複製給其他的物件(複製時,連該物件身上的腳本都會同時被複製,但是不會複製原先物件腳本身上的數值。簡單來說就是複製過去同時被初始化了)
可以和 這篇 一起服用~~
先建立一個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內產生一個物件
而按下「動態移除物件」時,又恢復到原來的樣子
留言列表