You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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(推荐)

  1. 打开NuGet for Unity窗口,搜索NAudio,选择与Unity.NET版本兼容的稳定版安装
  2. 找到安装后的NAudio dll(通常在Packages/NAudio/lib目录下),选中dll后在Inspector面板配置Platform Settings:
    • 根据目标平台(如Windows)勾选对应平台选项,取消其他不需要的平台
    • 设置CPU为Any CPU或对应架构
  3. 配置Unity运行时版本:
    打开Edit > Project Settings > Player > Other Settings,将Scripting Runtime Version设置为.NET Framework(NAudio依赖该运行时)

方式二:使用Unity适配版NAudio

  1. 下载与Unity版本匹配的、专门为Unity编译的NAudio包
  2. 将解压后的dll放入Assets/Plugins目录
  3. 同样在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 11:50:23