Buscar..


Introducción

Con la clase de Recursos es posible cargar dinámicamente los activos que no forman parte de la escena. Es muy útil cuando tiene que usar activos a pedido, por ejemplo, localizar audios en varios idiomas, textos, etc.

Los activos se deben colocar en una carpeta llamada Recursos . Es posible tener varias carpetas de Recursos distribuidas en la jerarquía del proyecto. Resources clase de Resources inspeccionará todas las carpetas de recursos que pueda tener.

Cada activo colocado en Recursos se incluirá en la compilación, incluso si no se hace referencia en su código. Por lo tanto, no inserte activos en Recursos indiscriminadamente.

//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();
    }
}

Recursos 101

Introducción

Unity tiene algunas carpetas 'especialmente nombradas' que permiten una variedad de usos. Una de estas carpetas se llama 'Recursos'

La carpeta 'Recursos' es una de las DOS formas de cargar activos en tiempo de ejecución en Unity (la otra es AssetBundles (Unity Docs)

La carpeta 'Recursos' puede residir en cualquier lugar dentro de su carpeta de Activos, y puede tener varias carpetas llamadas Recursos. El contenido de todas las carpetas de 'Recursos' se combinan durante el tiempo de compilación.

La forma principal de cargar un activo desde una carpeta de Recursos es usar la función Resources.Load . Esta función toma un parámetro de cadena que le permite especificar la ruta del archivo en relación con la carpeta Recursos. Tenga en cuenta que NO necesita especificar extensiones de archivo mientras carga un activo

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));
    }
}

Los objetos que se componen de varios objetos también se pueden cargar desde Recursos. Los ejemplos son tales objetos son modelos 3D con texturas al horno, o un sprite múltiple.

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


Poniendolo todo junto

Esta es una de mis clases de ayuda que utilizo para cargar todos los sonidos de cualquier juego. Puede adjuntar esto a cualquier GameObject en una escena y cargará los archivos de audio especificados desde la carpeta 'Recursos / Sonidos'

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;
        }
    }
}


Notas finales

  1. Unity es inteligente cuando se trata de incluir activos en su construcción. Cualquier activo que no esté serializado (es decir, utilizado en una escena que se incluye en una compilación) se excluye de una compilación. SIN EMBARGO, esto NO se aplica a ningún activo dentro de la carpeta de Recursos. Por lo tanto, no exagere al agregar recursos a esta carpeta

  2. Los activos que se cargan con Resources.Load o Resources.LoadAll se pueden descargar en el futuro utilizando Resources.UnloadUnusedAssets o Resources.UnloadAsset



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow