Unity 中的銷毀方法


 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 層次都不會被銷毀,全部保留下來

 

 

 

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM