유니티(Unity) 리소스 클래스(Resources) 함수 예시 모음(Resources.Load, Resources.LoadAll)

반응형

유니티(Unity) 리소스 클래스(Resources) 함수 예시 모음(Resources.Load, Resources.LoadAll)

자산을 포함한 오브젝트를 찾고 접근하는데 사용할수있습니다. Assets 폴더 하위의 Resources 폴더에 있는 모든 자산(Assets)은 Resources.Load 함수를 사용하여 접근할수있습니다. Resources 폴더에 있는 모든 자산은 빌드에 포함됩니다.
https://docs.unity3d.com/ScriptReference/Resources.html

 

Resources.Load 함수 예시

프리팹을 로드하여 씬에서 인스턴스화합니다.

GameObject prefab = Resources.Load<GameObject>("MyPrefab");
Instantiate(prefab, Vector3.zero, Quaternion.identity);

    
텍스처를 로드하여 재질에 적용합니다.
Texture2D texture = Resources.Load<Texture2D>("Textures/MyTexture");
Renderer renderer = GetComponent<Renderer>();
renderer.material.mainTexture = texture;  


오디오 클립을 로드하여 오디오 소스에서 재생합니다.
AudioClip clip = Resources.Load<AudioClip>("Audio/MyAudioClip");
AudioSource audioSource = GetComponent<AudioSource>();
audioSource.clip = clip;
audioSource.Play();


스프라이트를 로드하여 UI 이미지에 적용합니다.
Sprite sprite = Resources.Load<Sprite>("Sprites/MySprite");
Image image = GetComponent<Image>();
image.sprite = sprite;

 

 

Resources.Load 함수 두가지 방법 차이

Sprite sprite = Resources.Load<Sprite>("Sprites/MySprite");
제네릭(generic) 타입을 명시하여 Resources.Load<Sprite>와 같이 사용합니다. 이 방법은 Resources.Load 함수가 특정 타입(Sprite)의 객체만 반환하도록 보장합니다(컴파일 타임에 타입 체크가 이루어지기 때문에 런타임 오류를 방지)

 

Sprite sprite = Resources.Load("Sprites/MySprite") as Sprite;
as 키워드를 사용하여 Resources.Load가 반환하는 객체를 Sprite 타입으로 캐스팅합니다. 이 방식은 반환된 객체가 Sprite 타입이 아니면 null을 반환하므로 null 체크가 필요합니다.

 

 


Resources.LoadAll 함수 예시

특정 폴더에 있는 모든 텍스처 타입의 리소스를 로드합니다.
Texture2D[] textures = Resources.LoadAll<Texture2D>("Textures");
foreach (var texture in textures)
{
Debug.Log("Loaded texture: " + texture.name);
}

 

특정 폴더에 있는 모든 게임오브젝트 타입의 리소스를 로드하고 씬에서 인스턴스화합니다.

GameObject[] enemyPrefabs = Resources.LoadAll<GameObject>("Prefabs/Enemies");
foreach (var prefab in enemyPrefabs)
{
Instantiate(prefab, Vector3.zero, Quaternion.identity);
}

 

 

특정 폴더에 있는 모든 리소스를 로드하여 Object 타입의 배열을 반환합니다. 유니티에서 Object 타입은 모든 리소스 타입의 부모 클래스로 로드된 객체들이 프리팹, 텍스처, 오디오 클립 등 다양한 리소스일 수 있습니다.

Object[] objs = Resources.LoadAll("Prefabs");
int count = objs.Length;
Debug.Log("obj count " + count );


foreach (Object obj in objs )
{
Debug.Log("Object name is " + obj.name);
}

 

 

 

https://docs.unity3d.com/ScriptReference/Resources.Load.html
https://docs.unity3d.com/ScriptReference/Resources.LoadAll.html


 

 

 

반응형

댓글

Designed by JB FACTORY