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 层次都不会被销毁,全部保留下来

*** |  以上内容仅为学习参考、学习笔记使用  | ***

原文地址:https://www.cnblogs.com/ChenZiRong1999/p/13277830.html