본문 바로가기
Unity

유니티에서 Resources 폴더에 대해 알아보기

by Oz Driver 2025. 3. 31.

 

 

Unity 에서 프로젝트를 구성하다 보면 materials, prefabs, scripts 등과 같이 폴더를 만들어 에셋을 정리하게 됩니다. 하지만 대부분의 폴더는 개발자의 편의를 위한 것일 뿐, Unity 가 특별히 처리하지는 않습니다.

단 하나, Resources 폴더만은 예외입니다.
이 폴더는 Unity가 특별히 인식하며, 런타임 중 코드로 에셋을 직접 불러올 수 있는 유일한 폴더입니다.

 

 

Resources 폴더의 주요 특징

런타임 중에 동적 처리 

Resources 폴더에 있는 에셋은 런타임 중에 다음과 같이 불러올 수 있습니다

GameObject prefab = Resources.Load<GameObject>("GameManager");
GameObject obj = Instantiate(prefab);

 

사용하지 않아도 빌드에 포함

Resources 폴더에 들어간 에셋은 사용 여부와 관계없이 빌드 대상에 무조건 포함됩니다.
따라서 사용하지 않는 리소스를 그대로 두면 게임 용량만 커집니다.

 

폴더 구조 그대로 사용 가능

하위 폴더도 자유롭게 만들 수 있으며, 경로를 포함해 불러올 수 있습니다

Resources.Load("UI/PausePanel");

 

확장자는 생략

.prefab, .png 등의 확장자는 생략하고 경로만 사용합니다.

 

 

프리팹 생성 및 Resources 연결 방법

1. Hierarchy 에서 오브젝트를 만듭니다.

2. Project 창으로 드래그하여 프리팹을 만듭니다.

3. 이 프리팹을 Resources 폴더에 넣습니다.

4. 이제 다음과 같이 코드에서 언제든 불러올 수 있습니다.

GameObject obj = Instantiate(Resources.Load<GameObject>("Player"));

 

단, Inspector 에 직접 연결해둔 프리팹과는 별개입니다.

Resources 에서 load 를 한 경우, 반드시 Load + Instantiate 과정이 필요합니다.

 

 

더 이상 불필요한 asset 은 메모리에서 해제

Resources 로부터 불러온 에셋은 Unity 내부에 계속 유지되기 때문에, 아래와 같이 더 이상 필요하지 않게 된 경우에는 수동으로 정리해줘야 합니다.

 

* 특정 화면 또는 씬에서만 사용하는 에셋을 Load 한 경우

* 새로운 씬으로 전환된 후 이전 에셋을 더 이상 사용하지 않을 경우

void OnSceneChanged()
{
    // 이전 씬의 Resources 리소스 정리
    Resources.UnloadUnusedAssets();
}

 

이 함수는 연산 비용이 높기 때문에, 반드시 필요한 순간에만 사용하는 것이 좋습니다.
예를 들어 scene 전환 직후나 로딩 중 구간에서 호출하는 것이 적절합니다.

 

 

주의사항

* Resources 폴더는 넣기만 해도 빌드에 포함되므로, 꼭 필요한 리소스만 관리해야 합니다.

* 대규모 프로젝트에서는 Unity 의 Addressables 시스템 사용을 권장합니다.

* Resources 에 과도하게 의존하면 관리와 리팩토링이 어렵고, 메모리 낭비도 발생할 수 있습니다.

 

 

마무리

Resources 폴더는 Unity에서 런타임 중 코드로 직접 불러올 수 있는 유일한 경로입니다.
초기 개발 단계에서는 매우 유용하지만, 규모가 커질수록 사용량을 제한하고 구조적으로 관리하는 것이 중요합니다.

꼭 필요한 에셋만 넣고, 사용이 끝난 후에는 적절한 시점에 메모리를 정리하는 습관이 중요합니다.
Resource 관리가 점점 버거워진다면, Addressables 로 전환하는 것을 추천드립니다.