如何在ProjectView中引用特定文件?

时间:2015-05-16 22:48:40

标签: unity3d

如何引用ProjectView中尚未在游戏中预先预制或实例化的特定文件?我知道我可以使用Resources.Load,但我总是看到人们说如果可能的话,不要使用那种方法。

具体来说,我正在尝试创建一个方法,使用AudioSource创建一个空对象,并播放我告诉它播放的任何声音文件。我不想提前创建每个Audioclip组件(加上我到底有100万个预制件),但我需要告诉它要播放哪个声音文件。

此外,.Load方法是否在Resources之外工作?如果可以避免,我不想更改我的ProjectView层次结构,但是Resources.Load仅适用于位于资源文件夹中的文件。

1 个答案:

答案 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文件夹,则必须确保将您在场景中没有的文件手动添加到构建中。