Resources 클래스는 런타임 중 Resources 폴더에 위치한 에셋을 동적으로 불러오는 데 사용된다.
⚠️주의할 점
Resources 폴더는 직접 생성해야 하며, 새 프로젝트에 자동으로 포함되지 않는다.
기본 문법
public static Object Load(string path);
public static T Load<T>(string path) where T : Object;
예제
GameObject go = Resources.Load<GameObject>("Prefabs/MyPrefab");
Texture2D tex = Resources.Load<Texture2D>("Textures/Glass");
AudioClip clip = Resources.Load<AudioClip>("Audio/Explosion");
가급적이면 제네릭을 사용하는 것이 타입 안정성과 가독성 측면에서 더 좋다.
인스펙터에 의존하지 않고 동적으로 에셋을 로드 가능하다.
상황에 따라 편리하다.
<상황 예시>
스크립트에서 에셋을 동적으로 선택해야 할 때:
캐릭터가 입는 옷 종류가 20가지고, 런타임에 선택된 옷에 따라 텍스처를 바꿔야 한다면?
Resources.Load("Clothes/" + selectedName)처럼 문자열만으로 동적으로 불러올 수 있다.)
메모리에서 더 이상 참조되지 않는 에셋들을 언로드(제거)해주는 함수이다.
비동기 함수이므로 yield return과 함께 쓰는 게 일반적이다.
yield return Resources.UnloadUnusedAssets();
| 메서드 | 설명 |
|---|---|
Resources.Load<T>(path) | 지정한 경로의 에셋을 로드한다. (제네릭 사용 권장) |
Resources.LoadAll<T>(path) | 경로 내 모든 에셋을 배열로 로드한다. |
Resources.LoadAsync<T>(path) | 비동기로 에셋을 로드한다. 로딩 시간 동안 앱이 멈추지 않게 할 수 있다. |
Resources.UnloadUnusedAssets() | 사용되지 않는 에셋을 메모리에서 해제한다. |
Resources.FindObjectsOfTypeAll<T>() | 해당 타입의 모든 오브젝트를 반환한다. (에디터 전용) |
using UnityEngine;
public class ExampleClass : MonoBehaviour
{
void Start()
{
GameObject go = GameObject.CreatePrimitive(PrimitiveType.Plane);
Renderer rend = go.GetComponent<Renderer>();
rend.material.mainTexture = Resources.Load("glass") as Texture;
}
}
"glass"는 Resources 폴더 내 텍스처이며, 형변환 없이 Resources.Load("glass")처럼 제네릭으로 사용하는 게 더 안전하다.