📜 information
- Destroy
- GameObject, Component, Asset을 제거한다.
- Update 루프가 끝난 직후 이거나, 시간이 지정된 경우 호출 후 n초가 지난 뒤 바로 파괴한다.
- MonoBehaviour 스크립트를 파괴하면 OnDisable과 OnDestroy가 스크립트 제거 전에 호출된다.
- DestroyImmediate
- 즉시 객체를 파괴한다. 대신 Destroy를 사용할 것을 강력히 권장한다.
- 에디터 모드에서는 지연 파괴가 호출되지 않기 때문에 이 함수는 에디터 코드를 작성할 때만 사용해야 한다.
- 둘의 차이는 첫 번째로 파괴의 시점이다. Destroy는 당장 파괴가 되지 않는다.
- 다시 말해 Destroy가 불린 Update 프레임 내에서 파괴한 객체를 다시 불러도 해당 객체는 null이 아니라는 이야기이다. 해당 객체는 Update 프레임이 끝나야 파괴된다.
- 반대로 ****DestroyImmediate는 불린 즉시 객체가 파괴되며 해당 객체는 null이기 때문에 다시 부르면 Null참조예외가 일어난다.
- 두 번째 차이는 Asset 파괴 가능 유무이다. 일단 Asset(Texture, Audio …) 은 게임 모드일 때 파괴(메모리 해제가 아니고 진짜 파괴)하는 게 아니다. Destroy나 DestroyImmediate 둘 다 런타임 때 Asset에 사용하면 다음과 같은 에러가 발생함.
- 데이터 유실을 피하고자 Asset 파괴는 허용하지 않습니다. 정말로 Asset 파괴를 원하는 경우 DestroyImmediate(Object, true);를 사용하세요.
📖 참고 문서
'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 |