【问题标题】:How do I refer to specific files in ProjectView?如何引用 ProjectView 中的特定文件?
【发布时间】:2015-05-17 13:34:52
【问题描述】:

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

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

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

【问题讨论】:

    标签: unity3d


    【解决方案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 的最大优势之一是其中的任何文件都会自动添加到构建中,无论它是否在场景中使用。您的案例是一个很好的例子,说明何时有用。您可能在任何场景中都没有这些音频剪辑,但您可以在运行时加载和卸载它们。

    如果您不使用 Resources 文件夹,则必须确保将场景中没有的文件手动添加到构建中。

    【讨论】:

    • 谢谢,这很有帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-02
    相关资源
    最近更新 更多