유니티 텍스처(Texture) 객체 생성과 제거 예시(메모리 할당과 해제)

반응형

유니티 텍스처(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; 
객체의 참조를 해제하는 역할을 합니다.

반응형

댓글

Designed by JB FACTORY