함수 선언
public static void Destroy ( obj , t = 0.0F);
- UnityEngine.object Obj : 삭제할 object
- [DefaultValue("0.0F")] float t : 해당 시간이 지난 이후 삭제, 기본값일 경우(= 0.0) 현재 Update Loop가 끝난 후 삭제된다.
사용
public void OnMouseUp()
{
Destroy(this.gameObject);
}
Node 오브젝트들에 해당 함수를 구현하고 사용하고 오브젝트 클릭시, 다음과 같이 삭제됨을 확인할 수 있었다.
- Destroy() 함수가 호출될 시, OnDisable()과 OnDestroy()가 호출된다.
- 삭제시 수행할 작업이 있다면 해당 함수를 구현하여 처리할 수 있다.
public void OnMouseUp()
{
Debug.Log("Call Destroy Function");
Destroy(this.gameObject);
Debug.Log("Call Destroy Function End");
}
public void OnDestroy()
{
Debug.Log("OnDestroy");
}
public void OnDisable()
{
Debug.Log("OnDisable");
}
주의 사항
- 스크립트 내부에서 Destroy(this) 로 삭제를 구현할시 해당 클래스, 즉 스크립트만 삭제됨을 확인할 수 있다.
- 게임오브젝트를 다른 곳에서 리스트에 넣어서 관리하고 있었을 때, 삭제 후 해당 오브젝트를 관리할떄 조심해야 한다
- GameObject로 비교 시 null값이 나오지만, object로 비교시에는 GC가 메모리를 초기화해주기 전까지 null값이 나오지 않는다.(Fake NULL 이슈)
Debug.Log("Check!");
if ((GameObject)NodeBoard[0, 0] == null)
Debug.Log("Null GameObject Found!!!");
if ((object)NodeBoard[0, 0] == null)
Debug.Log("Null Object Found!!!");
if (!NodeBoard[0, 0])
Debug.Log("Null by BOOLcheck Found!!!");
Debug.Log("Check End!");
- 같은 이유로, 소멸자도 삭제 이후에 따로 출력된다.
같이보기
https://docs.unity3d.com/ScriptReference/Object.Destroy.html
NOTE
- Fake Null 이슈에 관해서는 더 깊게 정리해둘 필요가 있을 듯.
'Programming > Unity' 카테고리의 다른 글
유니티 코루틴 / Unity Coroutine (0) | 2022.03.11 |
---|