【问题标题】:Unity Microphone not working统一麦克风不工作
【发布时间】:2017-07-11 06:07:14
【问题描述】:

我正在尝试建立一个 VR 大厅,用户可以在其中相互交谈。 我对在 Unity 网站上找到的基本代码感到困惑。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class GetMicrophoneInput : MonoBehaviour
{
  // Use this for initialization
  void Start()
  {
    var audio = GetComponent<AudioSource>();
    audio.clip = Microphone.Start("Built-in Microphone", true, 10, 44100);
    audio.loop = true;
    while (!(Microphone.GetPosition(null) > 0))
    {

    }

    audio.Play();
  }

  // Update is called once per frame
  void Update()
  {

  }
}

第一个是关于Microphone.Start()。它说我不能使用Start(),因为它是受保护的。 第二个是关于Microphone.GetPosition()。它说麦克风没有 GetPosition 的定义。

两者都曾在以前的 Unity 版本中工作。

我正在使用 Unity 5.6.2。

任何想法如何让我再次工作?谢谢。

【问题讨论】:

  • 输入准确的错误信息。您的第二个错误可能是您的麦克风只是为空?这段代码完全适合我。我在 Unity 5.6.1

标签: c# unity3d audio


【解决方案1】:

不是 Unity 专家,但我认为问题在于您的 GetMicrophoneInput 类正在继承 MonoBehavior 类并尝试创建一个名为 Start() 的方法,而 MonoBehavior 类已经有一个 start 方法。如果您想让您的 Start() 方法在基础 MonoBehavior 类之外执行不同的功能,那么您需要将您的 Start 方法声明为:

protected override void Start()
{
var audio = GetComponent<AudioSource>();
audio.clip = Microphone.Start("Built-in Microphone", true, 10, 44100);
audio.loop = true;
while (!(Microphone.GetPosition(null) > 0))
{

}

audio.Play();
base.Start();//This tells your code to do what the base MonoBehavior class would do in the start method.
}

如果您不希望您的方法覆盖基本 Start() 方法,那么只需将您的方法命名为其他名称 :)。但是,Update 方法也是如此,因为它也是 MonoBehaviour 类中的一个函数。

关于您的Microphone.GetPosition 问题,Microphone class 确实有一个 GetPosition 函数,但函数中的一个参数是 deviceName。也许您需要传入“Built-In Microphone”而不是 null。

MonoBehavior Documentation

More info on overriding inherited class functions.

【讨论】:

  • 谢谢。我刚刚解决了这个问题。这是非常愚蠢的。有人创建了一个额外的麦克风类,而不是统一的类。我刚刚删除了这个类,现在一切正常。
猜你喜欢
  • 1970-01-01
  • 2019-10-04
  • 1970-01-01
  • 2013-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多