先看语音识别的效果

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);
        }
    }
}

更多推荐