unity+语音识别+uwp/pc

原创

NewSpeechRecognization.cs添加关键词脚本(加载场景后改脚本不需要再一次使用,整个程序中只运行一次就可以)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Windows.Speech;
using System.Linq;

public class NewSpeechRecognization : MonoBehaviour
{
    public static NewSpeechRecognization SpeechRecoTestInstance;
    //public Material yellow;
    //public Material red;
    //public Material blue;
    //public Material green;
    public string RecognizationWord;
    /// <summary>
    /// 关键词识别对象
    /// </summary>
    private KeywordRecognizer keywordRecognizer;

    /// <summary>
    /// 存放关键词的字典
    /// </summary>
    private Dictionary<string, System.Action> keywords = new Dictionary<string, System.Action>();
    private void Awake()
    {
        SpeechRecoTestInstance = this;
    }
    public void StartSpeech(string RecognizationWord)
    {

        keywords.Add(RecognizationWord, () =>
        {
            //Debug.Log("RecognizationWord"+ RecognizationWord);
            //transform.GetComponent<MeshRenderer>().material = yellow;

        });
    }
    public void OnSpeechRecognizationClear()
    {
        RecognizationWord = "";
    }
    public void StartRecognazation()
    {
        StartSpeech("识别工牌");

        StartSpeech("拍照");
        StartSpeech("开始");
        StartSpeech("正常");
        StartSpeech("异常");
        StartSpeech("确认");
        StartSpeech("退出");
        StartSpeech("结束");
        StartSpeech("关好");
        StartSpeech("是");
        StartSpeech("否");
        StartSpeech("运行");
        StartSpeech("停运");
        //StartSpeech("暂停");
        StartSpeech("回退");
        //StartSpeech("跳过设备");
        StartSpeech("跳过扫描");
        //StartSpeech("保存进度");
        //StartSpeech("跳转");

        StartSpeech("取消");
    }
    // Use this for initialization
    void Start()
    {
        StartRecognazation();
        //// 向字典中添加关键词,key为关键词, vallue为一个匿名action
        //keywords.Add("yellow", () =>
        //{
        //    Debug.Log("听到了 yellow");
        //    transform.GetComponent<MeshRenderer>().material = yellow;
        //});

        //keywords.Add("red", () =>
        //{
        //    Debug.Log("听到了 red");
        //    transform.GetComponent<MeshRenderer>().material = red;
        //});

        //keywords.Add("green", () =>
        //{
        //    Debug.Log("听到了 green");
        //    transform.GetComponent<MeshRenderer>().material = green;
        //});

        //keywords.Add("蓝色", () =>
        //{
        //    Debug.LogError("听到了 blue");
        //    transform.GetComponent<MeshRenderer>().material = blue;
        //});
       
        // 初始化关键词识别对象
        keywordRecognizer = new KeywordRecognizer(keywords.Keys.ToArray());

        // 添加关键词代理事件
        keywordRecognizer.OnPhraseRecognized += KeywordRecognizer_OnPhraseRecognized;

        // 注意: 这方法一定要写,开始执行监听
        keywordRecognizer.Start();
    }

    private void KeywordRecognizer_OnPhraseRecognized(PhraseRecognizedEventArgs args)
    {

        System.Action keywordAction;
        // if the keyword recognized is in our dictionary, call that Action.
        // 如果关键字在我们的字典中被识别,调用该action。
        if (keywords.TryGetValue(args.text, out keywordAction))
        {
            //Debug.Log("听到了,进入了事件方法  关键词语 : " + args.text.ToString());
            RecognizationWord = args.text.ToString();
            Debug.Log("RecognizationWord@@" + RecognizationWord);
            // 执行该action
            keywordAction.Invoke();
        }
    }

    // Update is called once per frame
    void Update()
    {

    }
}

语音识别关键词的使用WelcomPanelUI.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UIlogic;
using UnityEngine.UI;

public class WelcomPanelUI : MainUI
{
    public Button StartButton;
    public Button QuiteButton;
    public Image Mic_EN;
    public Image Mic_DI;
    // Use this for initialization
    void Start ()
    {
        OnBindEvent();
        OnInit();
        TaskAudioManager.TaskAudioManagerInstance.PlayTaskAudioByID((int)TaskType.WelcomID);
        StartButton.interactable = false;
    }
    //void OnSetMicState(bool isPlayMicAni)
    //{
    //    if (isPlayMicAni)
    //    {
    //        Mic_DI.gameObject.SetActive(false);
    //        Mic_EN.gameObject.SetActive(true);
    //    }
    //    else
    //    {
    //        Mic_DI.gameObject.SetActive(true);
    //        Mic_EN.gameObject.SetActive(false);
    //    }
    //}
    public override void OnBindEvent()
    {
        EventTriggerListener.Get(StartButton.gameObject).onClick = OnStartGameButtonClick;
        EventTriggerListener.Get(QuiteButton.gameObject).onClick = OnQuiteGameButtonClick;

    }
    public void OnStartGameButtonClick(GameObject go)
    {
        if (go == StartButton.gameObject)
        {
            if (TaskAudioManager.TaskAudioManagerInstance.playTaskAudio.isPlaying == false)
            { 
                StartGame();
            }
        }
    }
    void StartGame()
    {

        OnCreateNextWindow("ScannerWorkCardPanel", GlobalVariable.GlobalVariableInstance.InitePanelParentTransformRef);
        OnDeleteGameobject(gameObject);
        //OnSetNextWindowActive(UIDesignForScanerStaff.UIDesignForScanerStaffSingle.ScannerWorkCardPanelRef, true);
        //OnSetNextWindowActive(gameObject, false);
    }
   

    //初始化
    public override void OnInit()
    {
        OnSetMicState(false,Mic_DI,Mic_EN);
       // GameTemplateMethodSingleton.singleton.Init();
    }
    public void OnQuiteGameButtonClick(GameObject go)
    {
        if (go == QuiteButton.gameObject)
        {
            QuiteGame();
        }
    }
   

    public override void OnSpeecherRecognition()
    {
        if (TaskAudioManager.TaskAudioManagerInstance.playTaskAudio.isPlaying == false)
        {
            if (NewSpeechRecognization.SpeechRecoTestInstance.RecognizationWord == "开始")
            {
                NewSpeechRecognization.SpeechRecoTestInstance.OnSpeechRecognizationClear();
                StartGame();
            }
            if (NewSpeechRecognization.SpeechRecoTestInstance.RecognizationWord == "退出")
            {
                NewSpeechRecognization.SpeechRecoTestInstance.OnSpeechRecognizationClear();
                QuiteGame();
            }
            //if (SpeecherRecognitionSingle.singleton.OnSpeechText("开始"))
            //{
            //    SpeecherRecognitionSingle.singleton.OnClearSpeechText();
            //    StartGame();
            //}
            //if (SpeecherRecognitionSingle.singleton.OnSpeechText("退出"))
            //{
            //    SpeecherRecognitionSingle.singleton.OnClearSpeechText();
            //    QuiteGame();
            //}
        }
    }
    // Update is called once per frame
    void Update ()
    {
        if (TaskAudioManager.TaskAudioManagerInstance.playTaskAudio.isPlaying == true)
        {
            OnSetMicState(false, Mic_DI, Mic_EN);
        }
        else
        {
            StartButton.interactable = true;
            OnSetMicState(true, Mic_DI, Mic_EN);
            OnSpeecherRecognition();

        }
    }
}

  

 

using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngine.Windows.Speech;using System.Linq;
public class NewSpeechRecognization : MonoBehaviour{    public static NewSpeechRecognization SpeechRecoTestInstance;    //public Material yellow;    //public Material red;    //public Material blue;    //public Material green;    public string RecognizationWord;    /// <summary>    /// 关键词识别对象    /// </summary>    private KeywordRecognizer keywordRecognizer;
    /// <summary>    /// 存放关键词的字典    /// </summary>    private Dictionary<string, System.Action> keywords = new Dictionary<string, System.Action>();    private void Awake()    {        SpeechRecoTestInstance = this;    }    public void StartSpeech(string RecognizationWord)    {
        keywords.Add(RecognizationWord, () =>        {            //Debug.Log("RecognizationWord"+ RecognizationWord);            //transform.GetComponent<MeshRenderer>().material = yellow;
        });    }    public void OnSpeechRecognizationClear()    {        RecognizationWord = "";    }    public void StartRecognazation()    {        StartSpeech("识别工牌");
        StartSpeech("拍照");        StartSpeech("开始");        StartSpeech("正常");        StartSpeech("异常");        StartSpeech("确认");        StartSpeech("退出");        StartSpeech("结束");        StartSpeech("关好");        StartSpeech("是");        StartSpeech("否");        StartSpeech("运行");        StartSpeech("停运");        //StartSpeech("暂停");        StartSpeech("回退");        //StartSpeech("跳过设备");        StartSpeech("跳过扫描");        //StartSpeech("保存进度");        //StartSpeech("跳转");
        StartSpeech("取消");    }    // Use this for initialization    void Start()    {        StartRecognazation();        //// 向字典中添加关键词,key为关键词, vallue为一个匿名action        //keywords.Add("yellow", () =>        //{        //    Debug.Log("听到了 yellow");        //    transform.GetComponent<MeshRenderer>().material = yellow;        //});
        //keywords.Add("red", () =>        //{        //    Debug.Log("听到了 red");        //    transform.GetComponent<MeshRenderer>().material = red;        //});
        //keywords.Add("green", () =>        //{        //    Debug.Log("听到了 green");        //    transform.GetComponent<MeshRenderer>().material = green;        //});
        //keywords.Add("蓝色", () =>        //{        //    Debug.LogError("听到了 blue");        //    transform.GetComponent<MeshRenderer>().material = blue;        //});               // 初始化关键词识别对象        keywordRecognizer = new KeywordRecognizer(keywords.Keys.ToArray());
        // 添加关键词代理事件        keywordRecognizer.OnPhraseRecognized += KeywordRecognizer_OnPhraseRecognized;
        // 注意: 这方法一定要写,开始执行监听        keywordRecognizer.Start();    }
    private void KeywordRecognizer_OnPhraseRecognized(PhraseRecognizedEventArgs args)    {
        System.Action keywordAction;        // if the keyword recognized is in our dictionary, call that Action.        // 如果关键字在我们的字典中被识别,调用该action。        if (keywords.TryGetValue(args.text, out keywordAction))        {            //Debug.Log("听到了,进入了事件方法  关键词语 : " + args.text.ToString());            RecognizationWord = args.text.ToString();            Debug.Log("RecognizationWord@@" + RecognizationWord);            // 执行该action            keywordAction.Invoke();        }    }
    // Update is called once per frame    void Update()    {
    }}

posted @ 2019-03-28 14:26  WalkingSnail  阅读(669)  评论(0)    收藏  举报