Unity 中提供了三種關於對象銷毀的方法:
-
Destroy 方法
-
DestroyImmediate 方法
-
DontDestroyOnLoad 方法
Destroy 方法
static void Destroy(Object obj, float t = 0.0F);
刪除一個游戲物體或組件等
如果 Object 實際上為組件,則會將其從 gameobject 上刪除並銷毀
如果實際上為 gameobject 則將銷毀它的全部組件及其所有子物體,可以指定多長時間后銷毀
當然,實際上銷毀總是存在一定的延遲的,延遲到當前更新循環后和渲染之前
1 using UnityEngine; 2 3 public class DestroyTest : MonoBehaviour 4 { 5 void Start() 6 { 7 var collider = gameObject.GetComponent<Collider>(); 8 if (collider) 9 { 10 Destroy(collider); 11 print("Collider組件已移除!"); 12 } 13 } 14 }
銷毀 Cube 上的 Collider 組件
銷毀該對象(沒有子物體的情況)~
1 using UnityEngine; 2 3 public class DestroyTest : MonoBehaviour 4 { 5 bool flag = false; 6 7 void Update() 8 { 9 var cube = GameObject.Find("Cube"); 10 if (!flag &&cube) 11 { 12 flag = true; 13 Destroy(cube); 14 print("Cube對象已移除!"); 15 } 16 } 17 }
找到並銷毀 Cube 物體對象

銷毀該對象及所有子物體~
1 using UnityEngine; 2 3 public class DestroyTest : MonoBehaviour 4 { 5 void Start() 6 { 7 var cube = GameObject.Find("Cube"); 8 if (cube) 9 { 10 Destroy(cube); 11 print("Cube對象已移除!"); 12 } 13 } 14 }
找到並銷毀 Cube 對象及所有子物體

DestroyImmediate 方法
static void DestroyImmediate(Object obj, bool allowDestroyingAssets = false);
盡量使用 Destroy,該函數在寫編輯器代碼時使用,延時的銷毀永遠不會在編輯模式下調用
要注意的是,該函數會將資源永久銷毀,絕不要遍歷數組然后依次銷毀遍歷的元素
其中,allowDestroyingAssets 如果設置為 True 的話(默認為 flase),則資源就允許被銷毀
DontDestroyOnLoad 方法
static void DontDestroyOnLoad(Object target);
作用是在加載新場景的時候讓指定的目標物體不被自動銷毀
當加載一個新場景時,所有場景中的所有的物體都會被銷毀,然后新場景中的物體被加載進來
為了保持在加載新場景時某物體不被銷毀,便使用 DontDestroyOnLoad 保護目標物體
如果物體是一個組件或游戲對象的話,則所有 的Transform 層次都不會被銷毀,全部保留下來

*** | 以上內容僅為學習參考、學習筆記使用 | ***
