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 层次都不会被销毁,全部保留下来
*** | 以上内容仅为学习参考、学习笔记使用 | ***