Unity3D中销毁对象的方式

转载自:http://m.blog.csdn.net/blog/u010145745/39205461

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 initialization
	void Start () {
	
	}
	
	// Update is called once per frame
	void Update () {
		var collider = gameObject.GetComponent();
		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中的静态函数在程序中调用的时候,可以直接调用,不用写类名,当然写了也没有错,其他类的静态函数一定要写类名.函数名()来调用静态函数。

你可能感兴趣的:(Unity3D基础,unity3d)