資源 101
介紹
Unity 有一些特別命名的資料夾,允許各種用途。其中一個資料夾稱為資源
‘Resources’資料夾是 Unity 中執行時載入資產的兩種方式之一(另一種是 AssetBundles(Unity Docs))
Resources
資料夾可以駐留在 Assets 資料夾中的任何位置,你可以擁有多個名為 Resources 的資料夾。所有’Resources’資料夾的內容在編譯期間合併。
從 Resources 資料夾載入資產的主要方法是使用 Resources.Load 函式。此函式採用字串引數,該引數允許你指定檔案相對於 Resources 資料夾的路徑。請注意,載入資源時無需指定副檔名
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));
}
}
也可以從 Resources 載入由多個物件組成的物件。例如,這樣的物件是具有烘焙紋理的 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;
}
}
}
最後的筆記
-
在將資產包含到構建中時,Unity 非常聰明。任何未序列化的資產(即在構建中包含的場景中使用)都將從構建中排除。但是,這不適用於 Resources 資料夾中的任何資產。因此,不要過度新增資源到此資料夾
-
正在使用 Resources.Load 或 Resources.LoadAll 載入資產可以在未來使用解除安裝 Resources.UnloadUnusedAssets 或 Resources.UnloadAsset