如何引用ProjectView中尚未在游戏中预先预制或实例化的特定文件?我知道我可以使用Resources.Load,但我总是看到人们说如果可能的话,不要使用那种方法。
具体来说,我正在尝试创建一个方法,使用AudioSource创建一个空对象,并播放我告诉它播放的任何声音文件。我不想提前创建每个Audioclip组件(加上我到底有100万个预制件),但我需要告诉它要播放哪个声音文件。
此外,.Load方法是否在Resources之外工作?如果可以避免,我不想更改我的ProjectView层次结构,但是Resources.Load仅适用于位于资源文件夹中的文件。
答案 0 :(得分:1)
试试下面的代码。您需要做的是提供您要播放的剪辑的名称。当然,这个剪辑确实需要驻留在"资源"文件夹中。
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class LoadingSample : MonoBehaviour {
public void LoadASoundClip (string clipName) {
//Instantiate a new empty GameObject
GameObject go = new GameObject();
//Add an Audio Source component, and get it
go.AddComponent<AudioSource>();
var audioSource = go.GetComponent<AudioSource>();
//Assign the clip for the audio source
audioSource.clip = Resources.Load<AudioClip>(clipName);
}
}
另外,为什么你不应该使用Resources.Load呢?这是一种强化方法,但是在努力使用它会对你的游戏性能造成很大影响。
还有其他加载和卸载文件的方法,例如FileStream,但这些方法更复杂,只需添加到需要完成的工作上。但是,这允许您将文件存储在Resources文件夹之外。
然而,资源的一大优势是,其中的任何文件都会自动添加到构建中,无论它是否在场景中使用。您的案例是一个很好的例子,说明何时有用。您可能在任何场景中都没有这些音频剪辑,但您可以在运行时加载和卸载它们。
如果您不使用Resources文件夹,则必须确保将您在场景中没有的文件手动添加到构建中。