수색…


소개

Resources 클래스를 사용하면 장면의 일부가 아닌 애셋을 동적으로로드 할 수 있습니다. 온 디맨드 자산을 사용해야 할 때, 예를 들어 다국 언어 오디오, 텍스트 등을 현지화 할 때 매우 유용합니다.

Assets은 Resources 폴더에 있어야합니다. 여러 리소스 폴더가 프로젝트 계층 구조 전반에 퍼져있을 수 있습니다. Resources 클래스는 가질 수있는 모든 리소스 폴더를 검사합니다.

리소스 내에 배치 된 모든 자산은 코드에서 참조되지 않은 경우에도 빌드에 포함됩니다. 따라서 자원에 무차별 적으로 자산을 삽입하지 마십시오.

//Example of how to load language specific audio from Resources

[RequireComponent(typeof(AudioSource))]
public class loadIntroAudio : MonoBehaviour {
    void Start () {
        string language = Application.systemLanguage.ToString();
        AudioClip ac = Resources.Load(language + "/intro") as AudioClip; //loading intro.mp3 specific for user's language (note the file file extension should not be used)
        if (ac==null)
        {
            ac = Resources.Load("English/intro") as AudioClip; //fallback to the english version for any unsupported language
        }
        transform.GetComponent<AudioSource>().clip = ac;
        transform.GetComponent<AudioSource>().Play();
    }
}

리소스 101

소개

유니티에는 다양한 용도로 사용할 수있는 몇 가지 '특별히 명명 된'폴더가 있습니다. 이러한 폴더 중 하나를 '리소스'라고합니다.

'Resources'폴더는 Unity에서 런타임에 자산을로드하는 유일한 두 가지 방법 중 하나입니다. 다른 하나는 AssetBundles (Unity Docs)

'Resources'폴더는 Assets 폴더의 어느 곳에 나있을 수 있으며 Resources라는 폴더가 여러 개있을 수 있습니다. 모든 'Resources'폴더의 내용은 컴파일하는 동안 병합됩니다.

리소스 폴더에서 에셋을로드하는 주요 방법은 Resources.Load 함수를 사용하는 것입니다. 이 함수는 리소스 폴더를 기준 으로 파일의 경로를 지정할 수있는 문자열 매개 변수를 사용합니다. 저작물을로드하는 동안 파일 확장명을 지정할 필요가 없습니다.

public class ResourcesSample : MonoBehaviour {  
    
    void Start () {
        //The following line will load a TextAsset named 'foobar' which was previously place under 'Assets/Resources/Stackoverflow/foobar.txt'
        //Note the absence of the '.txt' extension! This is important!

        var text = Resources.Load<TextAsset>("Stackoverflow/foobar").text;
        Debug.Log(string.Format("The text file had this in it :: {0}", text));
    }
}

여러 오브젝트로 구성된 오브젝트도 자원에서로드 할 수 있습니다. 예를 들어 텍스처가 구워진 3D 모델 또는 다중 스프라이트가 이러한 객체입니다.

//This example will load a multiple sprite texture from Resources named "A_Multiple_Sprite"
var sprites = Resources.LoadAll("A_Multiple_Sprite") as Sprite[];


함께 모아서

다음은 모든 게임에서 모든 사운드를로드하는 데 사용하는 헬퍼 클래스 중 하나입니다. 이 장면을 장면의 GameObject에 첨부하면 'Resources / Sounds'폴더에서 지정된 오디오 파일을로드합니다

public class SoundManager : MonoBehaviour {
    
    void Start () {

        //An array of all sounds you want to load
        var filesToLoad = new string[] { "Foo", "Bar" };

        //Loop over the array, attach an Audio source for each sound clip and assign the 
        //clip property.
        foreach(var file in filesToLoad) {
            var soundClip = Resources.Load<AudioClip>("Sounds/" + file);
            var audioSource = gameObject.AddComponent<AudioSource>();
            audioSource.clip = soundClip;
        }
    }
}


최종 노트

  1. 통합은 자산을 빌드에 포함 할 때 영리합니다. 직렬화되지 않은 (즉, 빌드에 포함 된 장면에서 사용되는) 모든 자산은 빌드에서 제외됩니다. 그러나 이것은 Resources 폴더 내의 자산에는 적용되지 않습니다. 따라서이 폴더에 애셋을 추가 할 때 외출하지 마십시오.

  2. Resources.Load 또는 Resources.LoadAll을 사용하여로드 된 자산은 나중에 Resources.UnloadUnusedAssets 또는 Resources.UnloadAsset 을 사용하여 언로드 할 수 있습니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow