Unity

时间:2018-02-24 10:44:48

标签: c# unity3d unity5

我一直在尝试使用_Resources_文件夹加载几个AudioClip。这似乎很容易,但是,它对我来说并不适用,我已经遵循了许多教程并查看了许多问题及其解决方案,但仍然是死路一条。

我正在使用声音管理器脚本播放声音,我在其中创建对音频剪辑的引用并初始化它们,以及音频源。脚本:

public static AudioClip flashLightSwitchOnSound, flashLightSwitchOffSound;
static AudioSource audioSrc;
// Use this for initialization
void Start ()
{
    audioSrc = GetComponent<AudioSource> (); 
    flashLightSwitchOnSound = Resources.Load<AudioClip> ("sounds/flashlight_sound/large_flashlight_switched_on"); //Error appears here
    flashLightSwitchOffSound = Resources.Load<AudioClip> ("sounds/flashlight_sound/large_flashlight_switched_off"); //Error appears here
}

// Update is called once per frame
void Update ()
{

}

public static void PlaySound (string clip)
{
    switch (clip) {
    case "FlashlightSwitchOn":
        audioSrc.PlayOneShot (flashLightSwitchOnSound);
        break;
    case "FlashlightSwitchOff":
        audioSrc.PlayOneShot (flashLightSwitchOffSound);
        break;
    }
}

这就是我在Flashlight脚本中使用上述脚本的方式:

if (Input.GetKeyUp(KeyCode.F))
{
    FLight.enabled = !FLight.enabled;

    if (!isOn)
    {
        isOn = true;
        SoundManagerScript.PlaySound("FlashlightSwitchOn");

    }
    else
    {
        isOn = false;
        SoundManagerScript.PlaySound("FlashlightSwitchOff");
    }

}

当我开始游戏并开始按 F 时,结果是:

  

NullReferenceException:未将对象引用设置为对象的实例

在SoundManagerScript中加载音频文件时出现。检查它评论的脚本。

文件结构:

enter image description here

1 个答案:

答案 0 :(得分:1)

首先,您应该检查您获得'NullReferenceException'的位置。 您可能正确地加载了资源(看起来,如果您的文件名中没有任何拼写错误)。

你确定附加了'SoundScriptManager'组件的GameObject还附加了'AudioSource'组件吗?否则你会得到一个例外:

audioSrc.PlayOneShot(..);

由于'audioSrc'没有被'GetComponent'方法调用初始化。 如果是这种情况,您可以将此属性添加到'SoundScriptManager'类,以便Unity知道Manager的GameObject需要附加'AudioSource'组件:

[RequireComponent(typeof(AudioSource))]