转载自:http://m.blog.youkuaiyun.com/blog/u010145745/39205461
unity中提供了销毁对象的三种方法:
- Destroy方法
- DestroyImmediate方法
- 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<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;
}
销毁该对象及子对象的一切~
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中的静态函数在程序中调用的时候,可以直接调用,不用写类名,当然写了也没有错,其他类的静态函数一定要写类名.函数名()来调用静态函数。