官方文档
UnityEngine.Windows.Speech.DictationRecognizer
UnityEngine.Windows.Speech.GrammarRecognizer
UnityEngine.Windows.Speech.KeywordRecognizer
UnityEngine.Windows.Speech.PhraseRecognitionSystem
UnityEngine.Windows.Speech.PhraseRecognizedEventArgs
UnityEngine.Windows.Speech.PhraseRecognizer
UnityEngine.Windows.Speech.SemanticMeaning
开启语音识别:【设置】->【隐私】->【语音】->开启“语音识别”。如果无法连网,务必关闭“在线语音识别”。
1、在场景中选中MixedRealityToolkit
2、点击Clone复制一份DefaultHoloLens2ConfigurationProfile
3、选择Input
4、在Speech中配置语音命令
Keyword: 语音命令关键词 (支持中文)
LocalizationKey: 本地化key
KeyCode: 与语音命令等效的键盘输入
Action: 要触发的行为。例如: Select相当于执行Click操作。
5、处理语音命令
在希望处理语音命令的GameObject上挂上SpeechInputHandler脚本。为语音命令设置回调函数。
Is Focus Required: 勾选上后,只有当对象获得焦点后才会响应语音命令。
Persistent Keywords: 勾选上后,脚本会将GameObject设置为不销毁,即DontDestroyOnLoad(gameObject)。 勾上Persistent Keywords的GameObject必须位于场景层次结构的根级别。
Speech Confirmation Tooltip Prefab: 获得焦点后要显示的语音输入提示信息。
当GameObject处于隐藏状态时,SpeechInputHandler脚本是不会接受语音命令的。因为SpeechInputHandler在OnEnable事件回调中注册语音监听 ,在OnDisable事件回调中注销语音监听。
//关闭语音命令识别器
UnityEngine.Windows.Speech.PhraseRecognitionSystem.Shutdown();
//重启语音命令识别器
UnityEngine.Windows.Speech.PhraseRecognitionSystem.Restart();
【Bug】应用程序进入后台,再回到前台,语音识别器失效。
官方issues中已有人提交过此Bug
https://github.com/microsoft/MixedRealityToolkit-Unity/issues/10249
官方回复是Windows API Bug
https://fogbugz.unity3d.com/default.asp?1276443_feij5mjans4g1jds
解决方案:应用回到前台后重启语音识别器。
using UnityEngine;
using UnityEngine.Windows.Speech;
public class ApplicationBehaviour : MonoBehaviour
{
private void Awake()
{
DontDestroyOnLoad(gameObject);
}
private void OnApplicationPause(bool pause)
{
if (!pause)
{
//官方给的解决方案是重启语音识别
//经实际测试,应用程序回到前台后要延迟几秒重启语音识别才会生效。
Invoke("RecongnitionRestart", 5);
}
}
// 重启语音命令识别器
private void RecongnitionRestart()
{
PhraseRecognitionSystem.Shutdown();
PhraseRecognitionSystem.Restart();
}
}