Unity中使用NAudio遇编译错误:无法识别WaveOut求助
解决Unity中NAudio无法识别WaveOut的问题
问题分析
你同时使用了两种NAudio安装方式(NuGet for Unity + 手动放置dll),这会导致依赖冲突;另外代码中的命名空间错误、NAudio与Unity平台/运行时版本不匹配,也是WaveOut无法被识别的核心原因。
解决方案
1. 清理冲突的安装文件
先彻底清理重复的NAudio文件,避免依赖冲突:
- 删除
Assets/Plugins目录下的Naudio-Unity.dll - 通过NuGet for Unity卸载已安装的
NAudio和NAudio.Core包,确保项目中无残留的NAudio相关dll
2. 选择一种正确的安装方式
方式一:使用NuGet for Unity(推荐)
- 打开NuGet for Unity窗口,搜索
NAudio,选择与Unity.NET版本兼容的稳定版安装 - 找到安装后的NAudio dll(通常在
Packages/NAudio/lib目录下),选中dll后在Inspector面板配置Platform Settings:- 根据目标平台(如Windows)勾选对应平台选项,取消其他不需要的平台
- 设置CPU为
Any CPU或对应架构
- 配置Unity运行时版本:
打开Edit > Project Settings > Player > Other Settings,将Scripting Runtime Version设置为.NET Framework(NAudio依赖该运行时)
方式二:使用Unity适配版NAudio
- 下载与Unity版本匹配的、专门为Unity编译的NAudio包
- 将解压后的dll放入
Assets/Plugins目录 - 同样在Inspector中配置dll的平台兼容性,仅勾选目标平台
3. 修正代码错误
你的代码存在两处关键问题:
- 命名错误:
using Naudio-Unity;应改为using NAudio.Unity;(使用英文点号而非横杠) - 平台适配:WaveOut是NAudio针对Windows平台的音频输出类,建议添加平台宏限制,避免跨平台编译错误
修正后的示例代码:
using System.Collections; using System.Collections.Generic; using UnityEngine; using NAudio.Wave; using NAudio.Wave.SampleProviders; using NAudio.Unity; // 修正命名空间 public class NewBehaviourScript : MonoBehaviour { void Start() { // 仅在Windows平台下执行WaveOut相关逻辑 #if UNITY_STANDALONE_WIN for (int n = -1; n < WaveOut.DeviceCount; n++) { var caps = WaveOut.GetCapabilities(n); Debug.Log($"{n}: {caps.ProductName}"); } #endif } void Update() { } }
4. 验证编译
完成上述步骤后,刷新Unity项目并重新编译脚本。若仍有错误,查看Console面板的具体提示,排查是否存在dll未加载、平台配置错误等问题。
内容的提问来源于stack exchange,提问作者yemeth
相关产品推荐
相关产品推荐

