1、用unity开发
2、在HoloLens toolkit中找到TextToSpeech添加到场景中
3、添加KeywordManager.cs到场景中
using orange;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.Windows.Speech;
/// <summary>
/// 语音控制类,需要在start方法中初始化。
/// 使用方法:
/// 1、在场景对象中添加KeywordManager脚本
/// 2、在需要接收语音控制的脚本中,获取到KeywordManager实例,然后注册 OnSpeeked 事件
/// </summary>
public class KeywordManager : MonoBehaviour
{
public delegate void OnSpeekHandler(SpeechKeys key);
private KeywordRecognizer keywordRecognizer;
private List<string> keys;
public event OnSpeekHandler OnSpeeked;
private void Start()
{
//从枚举对象中获取识别命令
string[] values = System.Enum.GetNames(typeof(SpeechKeys));
keywordRecognizer = new KeywordRecognizer(values);
keys = new List<string>();
keys.AddRange(values);
keywordRecognizer.OnPhraseRecognized += KeywordRecognizer_OnPhraseRecognized;
keywordRecognizer.Start();
}
void OnDestroy()
{
if (keywordRecognizer != null)
{
StopKeywordRecognizer();
keywordRecognizer.OnPhraseRecognized -= KeywordRecognizer_OnPhraseRecognized;
keywordRecognizer.Dispose();
}
}
/// <summary>
/// 识别完成
/// </summary>
/// <param name="args"></param>
private void KeywordRecognizer_OnPhraseRecognized(PhraseRecognizedEventArgs args)
{
if (keys.Contains(args.text))
{
//转换为枚举类型,触发事件
SpeechKeys key = (SpeechKeys)System.Enum.Parse(typeof(SpeechKeys), args.text);
if (OnSpeeked != null)
{
OnSpeeked.Invoke(key);
}
}
}
/// <summary>
/// Make sure the keyword recognizer is off, then start it.
/// Otherwise, leave it alone because it's already in the desired state.
/// </summary>
public void StartKeywordRecognizer()
{
if (keywordRecognizer != null && !keywordRecognizer.IsRunning)
{
keywordRecognizer.Start();
}
}
/// <summary>
/// Make sure the keyword recognizer is on, then stop it.
/// Otherwise, leave it alone because it's already in the desired state.
/// </summary>
public void StopKeywordRecognizer()
{
if (keywordRecognizer != null && keywordRecognizer.IsRunning)
{
keywordRecognizer.Stop();
}
}
}
4、添加GestureManager.cs到场景中
using orange;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.XR.WSA.Input;
public class GestureManager : MonoBehaviour
{
private GestureRecognizer recognizer;
public delegate void OnGestureClick();
public delegate void OnGestureDoubleClick();
private List<OnGestureClick> onClicks = new List<OnGestureClick>();
private List<OnGestureDoubleClick> onDoubleClicks = new List<OnGestureDoubleClick>();
public void AddGestureClick(OnGestureClick onClick)
{
if (onClick == null || onClicks.Contains(onClick)) return;
onClicks.Add(onClick);
}
public void RemoveGestureClick(OnGestureClick onClick)
{
if (onClick != null && onClicks.Contains(onClick))
{
onClicks.R