在开发过程中经常会遇到想要某个游戏物体在执行完相应功能之后,就失去的存在的必要,应将之销毁,如果不销毁,将其放在那里不管不顾的话,轻则影响项目的运行效率,重则直接影响项目的正常运行,所以,销毁功能时必不可少的,大致有两个销毁方法,一个是游戏对象、组件、资源的销毁,另外一个是网络对象的销毁,下面进行详细的说明。
Object.Destory():功能时删除游戏对象、组件、资源
它既可以将对象立即销毁,也可以设置一个具体的时间进行销毁,如果删除的对象是一个组件的话,在相应的游戏物体上的组件就会被移除。
,有两种方式找到物体,一种是直接将物体挂上,代码如下:
using System.Collections;
public class Control : MonoBehaviour
{
public GameObject target;
public GameObject ball;
void Start()
{
target = GameObject.FindGameObjectWithTag("Ball");
Destroy(target.GetComponent<Rigidbody>(), 5f);
Destroy(target, 10f);
}
}
一种是先使用Tag标签找到物体在销毁
using UnityEngine;
using System.Collections;
public class Control : MonoBehaviour
{
public GameObject target;
public GameObject ball;
void Start()
{
Destroy(ball.GetComponent<Rigidbody>());
Destroy(ball, 10f);
}
}
在这个代码段中,首先是项目运行之后5s删除ball游戏物体中的刚体组件,然后再过5s销毁游戏物体.
NetWork.Destory方法:这个销毁方法是运用在网络对象上面,值得注意的是,当销毁对象的时候,本地与远端的对象都会被销毁,使用方法如下:
public static void Destory(NetWorkViewID viewID)
public static void Destory(GameObject gameobject)
第一种重载的方法是需要给出游戏物体的ID,然后系统会删除所有和该viewID相关的物体,这个方法本地的和远端的游戏物体都会被销毁.
第二种重载的方法直接传入一个游戏物体即可
using UnityEngine;
using System.Collections;
using UnityEngine.Networking;
public class Control : MonoBehaviour
{
public GameObject ball;
public float timer = 0;
private void Awake()
{
timer = Time.time;
}
void Update()
{
if(Time.time - timer > 2)
{
NetworkIdentity.Destroy(ball);
}
}
}
MonoBehaviour.OnDestory方法:
using UnityEngine;
using System.Collections;
public class Control : MonoBehaviour
{
private void Start()
{
Destroy(this.GetComponent<Control>(),5);
}
private void OnDestroy()
{
Debug.Log("this script has been destory");
}
}
第五行脚本代码的意思是,项目开始运行过5s以后删除这个脚本,然后再删除之后回调方法输出this script has been destory.