유니티 텍스처(Texture) 객체 생성과 제거 예시(메모리 할당과 해제)
- 유니티게임개발/기초공부
- 2024. 12. 26.
유니티 텍스처(Texture) 객체 생성과 제거 예시(메모리 할당과 해제)
new 키워드를 사용하여 런타임에서 동적으로 생성한 객체의 경우
텍스처가 불필요하면 명시적으로 객체를 파괴하고 참조를 해제합니다.
Texture2D texture = new Texture2D(2, 2);
if (texture != null)
{
Destroy(texture);
texture = null;
}
Destroy(texture);
객체는 메모리에서 즉시 해제되지않습니다. 메모리에서 객체가 실제로 해제되는 시점은 가비지 컬렉터( GC)가 이 객체를 수거할 때입니다.
texture = null;
객체에 대한 참조가 더 이상 없기 때문에 이 객체는 GC의 수거 대상이됩니다. 객체를 수거하는 시점은 GC 의 주기에 따라 달라집니다. GC가 이 객체를 수거하면 메모리에서 객체가 해제됩니다.
Resources.Load 함수를 사용하여 로드한 객체의 경우
Resources.Load 함수를 사용하여 로드한 에셋의 경우 Destroy 함수를 사용하여 직접 제거할수없습니다(게임오브젝트 및 컴포넌트는 제외)
Texture2D texture = Resources.Load("MyTexture");
Destroy(texture);
오류 발생
Destroying assets is not permitted to avoid data loss
Resources.UnloadAsset 함수를 사용하여 명시적으로 해제
에셋이 더 이상 사용되지않고 다른 곳에서 참조되지 않으면 Resources.UnloadAsset 함수를 사용하여 메모리에서 해제합니다.
Texture2D texture = Resources.Load<Texture2D>("MyTexture");
gameObject.GetComponent<MeshRenderer>().material.mainTexture =texture ;
씬을 이동하여 이 게임오브젝트가 제거될때 객체의 참조를 해제하고 Resources.UnloadAsset 함수를 사용하여 명시적으로 메모리를 해제합니다.
private void OnDestroy()
{
texture = null;
Resources.UnloadAsset(texture);
}
texture = null;
객체의 참조를 해제하는 역할을 합니다.
'유니티게임개발 > 기초공부' 카테고리의 다른 글
유니티 In Place 애니메이션을 Root Motion으로 설정하는 방법(RootMotionScript.cs) (0) | 2024.12.22 |
---|---|
유니티 에셋 스토어(Unity Asset Store) 서비스 약관 EULA 공식 문서 (0) | 2024.12.19 |
유니티(Unity)에서 옷감(Cloth) 시뮬레이션 기초 사용법 튜토리얼 (0) | 2024.12.18 |
유니티(Unity) 사용자 데이터 파일 저장 사용법 문서 모음(Persistent Player Data) (0) | 2024.12.18 |
유니티(Unity) 안드로이드 런처 앱 이름(언어) 변경하기(Localization, App info) (0) | 2024.12.17 |