如何播放即时加载的声音
Posted
技术标签:
【中文标题】如何播放即时加载的声音【英文标题】:How to play sounds loaded on the fly 【发布时间】:2013-04-11 11:50:18 【问题描述】:我试图为我小组的声音设计师制作一个工具,让他可以听到他在 Unity 中播放的声音文件。
检查是否可以加载 检查音量是否正确 检查循环是否正确等等……
我的问题是找到 Unity 如何管理加载位于文件夹中某处的音频文件。
我发现很多话题都在谈论它,但没有真正解决如何让 Unity 动态加载外部文件的解决方案。
【问题讨论】:
【参考方案1】:如果您想从与 .exe / .app 相同的目录中加载文件,您可以使用:
使用 System.IO DirectoryInfo() 获取所有文件名 使用 WWW 类 流式传输/加载找到的文件这里是代码:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System.IO;
public class SoundPlayer : MonoBehaviour
string absolutePath = "./"; // relative path to where the app is running
Audiosource src;
List<AudioClip> clips = new List<AudioClip>();
int soundIndex = 0;
//compatible file extensions
string[] fileTypes = "ogg","wav";
FileInfo[] files;
void Start ()
//being able to test in unity
if(Application.isEditor) absolutePath = "Assets/";
if(src == null) src = gameObject.AddComponent<AudioSource>();
reloadSounds();
void reloadSounds()
DirectoryInfo info = new DirectoryInfo(absolutePath);
files = info.GetFiles();
//check if the file is valid and load it
foreach(FileInfo f in files)
if(validFileType(f.FullName))
//Debug.Log("Start loading "+f.FullName);
StartCoroutine(loadFile(f.FullName));
bool validFileType(string filename)
foreach(string ext in fileTypes)
if(filename.IndexOf(ext) > -1) return true;
return false;
IEnumerator loadFile(string path)
WWW www = new WWW("file://"+path);
AudioClip myAudioClip = www.audioClip;
while (!myAudioClip.isReadyToPlay)
yield return www;
AudioClip clip = www.GetAudioClip(false);
string[] parts = path.Split('\\');
clip.name = parts[parts.Length - 1];
clips.Add(clip);
[编辑]
如果人们想改进文件管理,我推荐this link
【讨论】:
那么,您如何“检查循环是否正确”?如果您要回答自己的问题,请完全回答。 我认为最好使用 Path.Combine (msdn.microsoft.com/ru-ru/library/vstudio/fyy7a5kt(v=vs.90).aspx) 来避免平台依赖。 @Joetjah OP 表示问题只是为了找到 Unity 如何管理加载音频文件以上是关于如何播放即时加载的声音的主要内容,如果未能解决你的问题,请参考以下文章