先看语音识别的效果
Unity测试语音识别视频
然后是代码部分,首先先看命名空间----
using System;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using UnityEditor;
using UnityEngine.Windows.Speech;
最重要的就是这个using UnityEngine.Windows.Speech;
对于这个命名空间官方是这样解释和示例的
以下是我运用的Demo示例 添加的指令可能也点多 自行斟酌使用
public class Vudio : MonoBehaviour
{
//需要控制的游戏对象 (拖拽实例化即可)
public GameObject fire;
private bool isWalk, isCallBack;
private int walkspeed = 10;
private int backspeed = 5;
KeywordRecognizer keyword;
Dictionary<string, Action> dic = new Dictionary<string, Action>();
// Start is called before the first frame update
void Start()
{
dic.Add("左", Left);
dic.Add("右", Right);
dic.Add("前", Forward);
dic.Add("后", Back);
dic.Add("上", Up);
dic.Add("下", Down);
dic.Add("走", Walk);
dic.Add("停", Stop);
dic.Add("回来", CallBack);
dic.Add("关闭", Over);
keyword = new KeywordRecognizer(dic.Keys.ToArray());
keyword.OnPhraseRecognized += Keyword_OnPhraseRecognized;
//开启
keyword.Start();
}
private void Keyword_OnPhraseRecognized(PhraseRecognizedEventArgs args)
{
//输出所控制的指令
Debug.Log(args.text);
//调用指令回调函数
dic[args.text].Invoke();
}
private void Over()
{
EditorApplication.isPlaying = false;
}
private void CallBack()
{
isCallBack = true;
isWalk = false;
}
private void Stop()
{
isWalk = false;
isCallBack = false;
}
private void Walk()
{
isWalk = true;
isCallBack = false;
}
private void Down()
{
fire.transform.position = new Vector3(fire.transform.position.x, fire.transform.position.y - 1, fire.transform.position.z);
}
private void Up()
{
fire.transform.position = new Vector3(fire.transform.position.x, fire.transform.position.y + 1, fire.transform.position.z);
}
private void Back()
{
fire.transform.position = new Vector3(fire.transform.position.x, fire.transform.position.y, fire.transform.position.z - 1);
}
private void Forward()
{
fire.transform.position = new Vector3(fire.transform.position.x, fire.transform.position.y, fire.transform.position.z + 1);
}
private void Right()
{
fire.transform.position = new Vector3(fire.transform.position.x + 1, fire.transform.position.y, fire.transform.position.z);
}
private void Left()
{
fire.transform.position = new Vector3(fire.transform.position.x - 1, fire.transform.position.y, fire.transform.position.z);
}
private void Update()
{
if (isWalk)
{
fire.transform.Translate(Vector3.forward * Time.deltaTime * walkspeed);
}
if (isCallBack)
{
fire.transform.Translate(Vector3.back * Time.deltaTime * backspeed);
}
}
}