일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 게임개발
- 병맛게임
- AR Foundation
- ARProgect
- 인터페이스
- ExtensionMethod
- C#
- github
- Quaternion
- 깃허브
- 레이캐스트
- 유니티
- AR게임
- 로케트
- 1인개발
- 확장메서드
- raycast
- callbyvalue
- 소규모프로젝트
- ar
- callbyreference
- 짐벌락
- 리듬게임
- 게임제작
- Euler
- Unity
- 게임
- 델리게이트
- AR세팅
- 리듬게임에디터
- Today
- Total
Ssssong += Dev
[유니티] Destroy / DestroyImmediate 본문
https://blog.fetchinist.com/?p=308
유니티 Editor에서는 Destroy()를 사용할 수 없다.
이유는 Destroy()가 지연 파괴이기 때문이다. public static void Destroy(Object obj, float t = 0.0f); 에서
t에 시간을 넣을 시 해당 시간만큼 파괴가 지연되고
시간값을 설정하지 않더라도 Destroy()로 파괴 명령을 한 객체는 해당 Update 루프가 끝날 때 까지 살아있게 된다.
따라서 Update가 돌지 않는 편집기에서는 Destroy() 대신 DestroyImmediate를 사용해야 한다.
반대로 Editor가 아닌 게임 코드에서는 Destory()를 사용해야 한다.
이 함수는 Asset를 영구적으로 파괴할 수 있으므로 주의해야 한다.
또한 절대로 배열을 돌면서 돌고 있는 배열 요소를 파괴해서는 안된다.
배열이 있다고 해서 배열을 도는 도중 배열 요소를 지워버리면 반복문은 남은 횟수를 마저 돌아도
매열은 요소가 줄어 아예 다른 주소를 참조하거나 잘못된 주소를 참조하게 되어 예외가 발생간다.
*DestroyImmediate 사용 시 주의해야 할 점은 asset이 영구 파괴될 수 있다는 점이다.
Asset 파괴 가능 유무 또한 다르다.
DestroyImmediate(Object, true) 로 파괴하면 파일이 삭제되지만 물리디스크에서 삭제되는 것은 아니다. << ?
사용하지 않는 Asset을 메모리에서 내리기(해제하기) 위한 것이라면
Resource.UnloadAsset을 사용해 직접 내리거나 Resources.UnloadUnusedAssets을 사용해서 사용하지 않는 Asset 모두를 내리면 된다.