我一直在尝试使用_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中加载音频文件时出现。检查它评论的脚本。
文件结构:
答案 0 :(得分:1)
首先,您应该检查您获得'NullReferenceException'的位置。 您可能正确地加载了资源(看起来,如果您的文件名中没有任何拼写错误)。
你确定附加了'SoundScriptManager'组件的GameObject还附加了'AudioSource'组件吗?否则你会得到一个例外:
audioSrc.PlayOneShot(..);
由于'audioSrc'没有被'GetComponent'方法调用初始化。 如果是这种情况,您可以将此属性添加到'SoundScriptManager'类,以便Unity知道Manager的GameObject需要附加'AudioSource'组件:
[RequireComponent(typeof(AudioSource))]