我正在尝试建立一个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 专家,但我相信问题是您GetMicrophoneInput
类继承了MonoBehavior
类,并在 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
问题,麦克风类确实有一个GetPosition功能,但函数中的一个参数是deviceName。也许您需要传入"内置麦克风"而不是空。
单行为文档
有关重写继承的类函数的详细信息。