我想要做的是在文件夹中包含一个音频文件(在资源下),我可以将任何合格的音频文件放在指定的文件夹中,并从该单点读取程序中的众多触发器(这就是为什么我的 AudioClip下面是公共静态的,所以我可以参考它)。目前,相同的音频文件在整个程序中工作,但要更改文件需要在 Inspector 中手动重新定义,我的最终客户将无法访问,而且由于存在大量参考点,这很乏味。
这是我到目前为止所拥有的:
public static AudioClip BGM;
public AudioSource BGMSource;
private string formatted1;
void Start()
{
foreach(string file in System.IO.Directory.GetFiles(Application.dataPath+"/Resources/Audio/BGM"))
{
if(file.EndsWith(System.IO.Patch.GetExtension(".mp3")))
{
formatted1 = file.Replace(".mp3",string.Empty);
BGM = Resources.Load<AudioClip>(formatted1);
//BGM = (AudioClip)Resources.Load(formatted1,typeof(AudioClip)); <--same result with this
Debug.Log("found: "+formatted1);
}
}
if(BGM == null)
{
Debug.Log("Yeah, its null");
}
BGMSource.PlayOneShot(BGM, .9f);
if(BGMSource.isPlaying != true)
{
Debug.Log("I'm not playing");
}
}
因此,这只是不播放,没有错误消息。原来BGM是空的。Debug 是这样说的,但是如果我要为 BGMSource.clip.name 添加一个 Debug 调用,它将完全出错,并在该 Debug 上出现 NullReferenceException。
formatted1 字符串的调试(文件路径和名称),它确实提供了正确的文件,称为 Test.mp3 ("C:/...Resources/Audio/BGM\Test"),按照推荐的格式没有 ".mp3"从另一个站点。我确实尝试过使用 .mp3 扩展名,似乎没关系,仍然没有播放。我还尝试使用 .wav 文件和 .ogg 文件,结果相同(注意:如果我手动附加为公共 AudioClip,所有文件都很好,因为在这种情况下,上面写的 AudioSource 也会播放,但正如我所带领的,我们在这种情况下不希望那样)。是的,所有测试音频文件都在目录 /Resources/Audio/BGM 中。
另一个网站说了一些关于添加到文件顶部的内容 [RequireComponent(typeof(AudioClip))] 或 [RequireComponent(typeof(AudioSource))] 但什么也没做。
最后,这个程序最终将被分配给一个没有源访问权限的组,因此他们必须能够通过将任何 .mp3 放在 Resources/Audio/BGM 中以进行自动播放来交换音频文件。
欢迎任何帮助,谢谢!