Unity麦克风无法正常工作

时间:2017-07-10 20:36:03

标签: c# unity3d audio

我正在尝试构建一个用户可以互相交流的VR大厅。 我很难使用我在Unitywebsite上找到的基本代码。

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()。它说Microphone没有GetPosition的定义。

两者都曾用于以前版本的Unity。

我正在使用Unity 5.6.2。

我是如何重新开始工作的?感谢。

1 个答案:

答案 0 :(得分:1)

不是Unity专家,但我认为问题是你的GetMicrophoneInput类继承了MonoBehavior类并尝试在MonoBehavior时创建一个名为Start()的方法class已经有一个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 DOES有一个GetPosition功能,但该功能的参数是deviceName。也许你需要传入&#34;内置麦克风&#34;而不是null。

MonoBehavior Documentation

More info on overriding inherited class functions.