Unity

Destroy vs DestroyImmediate

JiHxxn 2024. 3. 16. 15:33

📜 information

  1. Destroy
    • GameObject, Component, Asset을 제거한다.
    • Update 루프가 끝난 직후 이거나, 시간이 지정된 경우 호출 후 n초가 지난 뒤 바로 파괴한다.
    • MonoBehaviour 스크립트를 파괴하면 OnDisable과 OnDestroy가 스크립트 제거 전에 호출된다.
  2. DestroyImmediate
    • 즉시 객체를 파괴한다. 대신 Destroy를 사용할 것을 강력히 권장한다.
    • 에디터 모드에서는 지연 파괴가 호출되지 않기 때문에 이 함수는 에디터 코드를 작성할 때만 사용해야 한다.

  • 둘의 차이는 첫 번째로 파괴의 시점이다. Destroy는 당장 파괴가 되지 않는다.
    • 다시 말해 Destroy가 불린 Update 프레임 내에서 파괴한 객체를 다시 불러도 해당 객체는 null이 아니라는 이야기이다. 해당 객체는 Update 프레임이 끝나야 파괴된다.
    • 반대로 ****DestroyImmediate는 불린 즉시 객체가 파괴되며 해당 객체는 null이기 때문에 다시 부르면 Null참조예외가 일어난다.
  • 두 번째 차이는 Asset 파괴 가능 유무이다. 일단 Asset(Texture, Audio …) 은 게임 모드일 때 파괴(메모리 해제가 아니고 진짜 파괴)하는 게 아니다. Destroy나 DestroyImmediate 둘 다 런타임 때 Asset에 사용하면 다음과 같은 에러가 발생함.
    • 데이터 유실을 피하고자 Asset 파괴는 허용하지 않습니다. 정말로 Asset 파괴를 원하는 경우 DestroyImmediate(Object, true);를 사용하세요.

📖 참고 문서

Destroy와 DestroyImmediate

 

fetchinist blog

2013/05/31 Destroy와 DestroyImmediate 유니티 2버전부터 지금까지 쓰면서 설명 대충 보고 쓰다가 잘못 알고 있는 걸 이번에 제대로 알게 돼서 적어둡니다. 먼저 함수 설명을 봅시다. +2022.7.24 > 최신 내용

blog.fetchinist.com

 

'Unity' 카테고리의 다른 글

[길찾기 알고리즘] Flood Fill  (0) 2024.03.17
[셔플 알고리즘] The Fisher-Yates  (0) 2024.03.16
Physics.OverlapSphere  (0) 2024.03.16
Vector3.Distance vs sqrMagnitude  (2) 2024.03.16
RayCast(QueryTriggerInteraction)  (0) 2024.03.16