유니티(Unity)에서 Resources 폴더는 특정 리소스를 런타임에 동적으로 로드할 수 있도록 하기 위해 사용되는 특별한 폴더입니다. 이 폴더에 있는 파일들은 빌드 시 자동으로 프로젝트에 포함되며, 코드에서 Resources.Load
함수를 사용해 해당 리소스를 불러올 수 있습니다.
예시
public class Example : MonoBehaviour
{
void Start()
{
// Resources 폴더 안에 있는 "MyTexture"라는 이름의 텍스처 로드
Texture2D myTexture = Resources.Load<Texture2D>("Textures/MyTexture");
// 로드한 텍스처를 사용할 오브젝트에 적용
GameObject myObject = new GameObject("MyObject");
Renderer renderer = myObject.AddComponent<Renderer>();
renderer.material.mainTexture = myTexture;
}
}
Resources
폴더는 프로젝트의 Assets 폴더 아래에 자유롭게 생성할 수 있습니다. 여러 개의 Resources
폴더를 만들 수 있으며, 그 안에 다양한 파일들을 저장할 수 있습니다.
Resources.Load<T>(string path)
함수를 사용하여 Resources 폴더 안의 리소스를 동적으로 로드할 수 있습니다. 여기서 T
는 로드할 리소스의 타입(예: Texture2D
, AudioClip
등)을 나타내고, path
는 파일 경로(확장자 제외)입니다.
예
Texture2D myTexture = Resources.Load<Texture2D>("Textures/MyTexture");
Resources.UnloadUnusedAssets()
를 호출하면 더 이상 사용되지 않는 Resources
폴더의 리소스들을 언로드(unload)하여 메모리를 해제할 수 있습니다.
특정 리소스를 언로드할 때는 Resources.UnloadAsset(Object asset)
을 사용합니다.
예
Resources.UnloadAsset(myTexture);
에셋관리의 난이도가 증가하고, 메모리 관리가 복잡해지며 빌드 및 게임 실행시간이 늘어납니다. 단점을 보완하면서 사용하는 방법은
- 과도한 사용 자제: Resources 폴더에 너무 많은 리소스를 저장하는 것은 좋지 않습니다. 빌드된 애플리케이션에서 메모리 관리가 어려워질 수 있으며, 불필요하게 메모리 사용량이 늘어날 수 있습니다.
- 메모리 로딩: Resources.Load는 리소스를 메모리에 즉시 로드하므로, 큰 파일을 로드할 때는 주의가 필요합니다. 필요할 때마다 동적으로 로드하고, 사용 후에는 적절히 해제하는 것이 좋습니다.
- AssetBundle 사용 고려: 프로젝트가 커질수록 AssetBundle과 같은 더 효율적인 방법을 사용하는 것이 좋습니다. AssetBundle은 빌드된 패키지에서 리소스를 효율적으로 관리하고 로드할 수 있는 유니티의 기능입니다.