unity中的destroy

来源:互联网 发布:苹果mac找不到美图秀秀 编辑:程序博客网 时间:2024/05/06 14:19

unity中提供了销毁对象的三种方法:

  1. Destroy方法
  2. DestroyImmediate方法
  3. DontDestroyOnLoad方法
Destroy方法:
static void Destroy(Object obj, float t = 0.0F);
删除一个游戏物体或组件等。如果Object实际上为组件,则会将其从gameobject中删除并销毁;如果实际上为gameobject则将销毁它的全部组件及其所有子物体~可以指定多长时间后销毁,当然实际上销毁总是存在一定的延迟的,延迟到当前更新循环后和渲染之前。

销毁组件~
public class DestroyTest : MonoBehaviour {// Use this for initializationvoid Start () {}// Update is called once per framevoid Update () {var collider = gameObject.GetComponent<Collider>();if (collider){Debug.Log("collider exists");Destroy(collider);}}}
原来运行后


销毁该对象(无子对象情况)~
public class NewBehaviourScript : MonoBehaviour {void Start () {var cylinder = GameObject.CreatePrimitive (PrimitiveType.Cylinder);}void Update () {var cylinder = GameObject.Find("Cylinder");if (!flag && cylinder){flag = true;Debug.Log("cylinder exists~");Destroy(cylinder);}}bool flag = false;}

并且Hierarchy中不存在Cylinder对象~

销毁该对象及子对象的一切~
var cube = GameObject.Find("Cube");if (cube){flag = true;Debug.Log("cube exists");Destroy(cube);}
原先:运行后:



DestroyImmediate方法:
static void DestroyImmediate(Object obj, bool allowDestroyingAssets = false);
尽量使用Destroy,该函数在写编辑器代码时使用,延时的销毁永远不会在编辑模式下调用。务必小心的是,该函数会将资源永久销毁,绝不要遍历数组然后依次销毁遍历的元素。其中,allowDestroyingAssets如果设置为TRUE则资源就允许被销毁~

DontDestroyOnLoad方法:
static void DontDestroyOnLoad(Object target);
作用是在加载新场景的时候使目标物体不被自动销毁~
当加载一个新关卡时,所有场景中的所有的物体都会被销毁,然后新关卡中的物体被加载进来,为了保持在加载新关卡时物体不被销毁,使用DontDestroyOnLoad保持,如果物体是一个组件或游戏对象,则所有的Transform层次都不会被销毁,全部保留下来。


还发现了一个现象,就是Object中的静态函数在程序中调用的时候,可以直接调用,不用写类名,当然写了也没有错,其他类的静态函数一定要写类名.函数名()来调用静态函数。

0 0
原创粉丝点击