我需要获取resources文件夹中的audioClip,以便据我所知我需要使用Resources.Load<AudioClip>(path)
或Resources.Load(path) as AudioClip
,但这是行不通的,它甚至不返回null而是停止代码
我的代码示例:
private void FetchAudioClipAndStartPlay(int userPos, int index)
{
AudioClip clip = Resources.Load($"Audio/Demo_ENG/D{userPos}a") as AudioClip;
Debug.Log("Starting Coroutine " + index);
StartCoroutine(PlayAudioClipAndStartRetrievingFromDatabase(index, clip));
}
IEnumerator PlayAudioClipAndStartRetrievingFromDatabase(int index, AudioClip clip)
{
Debug.Log("Starting to play " + index);
audioSource.PlayOneShot(clip, 1f);
yield return new WaitForSeconds(clip.length);
if (index < numberOfPlayers)
{
RetrieveFromDatabase(index++);
}
}
(它不会进入协程)
所有音频文件均为.mp3
非常感谢任何指导和提示!
答案 0 :(得分:2)
Resources
folder:请勿使用。
提出此强烈建议的原因有几个:
- 使用Resources文件夹可以更精细地进行内存管理 困难资源文件夹使用不当会增加应用程序 启动时间和构建时间
- 作为资源数量 文件夹增加,这些文件夹内资产的管理 变得非常困难
- 资源系统会降低项目的 向特定平台交付自定义内容的能力,以及 消除了增量内容升级的可能性 AssetBundle Variants是Unity调整内容的主要工具 每个设备上
检查this answer,了解如何加载音频文件的解决方案:
public void LoadSong()
{
StartCoroutine(LoadSongCoroutine());
}
IEnumerator LoadSongCoroutine()
{
string url = string.Format("file://{0}", path);
WWW www = new WWW(url);
yield return www;
song.clip = www.GetAudioClip(false, false);
songName = song.clip.name;
length = song.clip.length;
}