2017-06-01 72 views
3

目标:从一个场景改变到另一个使用听觉对照。SendMessage消息不启动功能(HoloLens /统一/ C#)

问题:在HoloLens仿真器中启动应用程序时,会打开第一个场景。在说出“下一步”时,HoloLens确实会识别该句子,但sendMessage不会打开OnNextStep()函数。

感谢您的帮助! :)

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

public class KeywordManager : MonoBehaviour { 

    KeywordRecognizer keywordRecognizer = null; 
    Dictionary<string, System.Action> keywords = new Dictionary<string, System.Action>(); 

    // Use this for initialization 
    void Start() { 
     keywords.Add("Next Step",() => 
     { 
      SendMessage("OnNextStep", SendMessageOptions.DontRequireReceiver); 
     }); 

     // Tell the KeywordRecognizer about our keywords. 
     keywordRecognizer = new KeywordRecognizer(keywords.Keys.ToArray()); 

     // Register a callback for the KeywordRecognizer and start recognizing! 
     keywordRecognizer.OnPhraseRecognized += KeywordRecognizer_OnPhraseRecognized; 
     keywordRecognizer.Start(); 
    } 

    private void KeywordRecognizer_OnPhraseRecognized(PhraseRecognizedEventArgs args) 
    { 
     System.Action keywordAction; 
     if(keywords.TryGetValue(args.text, out keywordAction)) 
     { 
      keywordAction.Invoke(); 
     } 
    } 

    void OnNextstep() 
    { 
     UnityEngine.Debug.Log(this); 
     SceneManager.LoadScene("FirstStepScene"); 
    } 

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

    } 
} 
+1

1.发布您的代码不是截图。 2.使用'UnityEngine.Debug.Log'而不是'System.Diagnostics.Debug.WriteLine'。使用Debug.Log,您现在可以告诉我们哪个功能无法正常工作。告诉我们是否在调用OnNextstep。 – Programmer

+0

已添加代码。 OnNextStep不被调用。 –

+1

您也不需要'SendMessage'在这里。你可以直接调用这个方法:'keywords.Add(“Next Step”,()=> { OnNextStep(); });'这会带来副作用,指出方法名称没有完全匹配。 ;) – Draco18s

回答

4

Unity的SendMessage函数在调用函数时区分大小写。

你函数名OnNextstep但你打电话OnNextStep

SendMessage("OnNextStep", SendMessageOptions.DontRequireReceiver); 

通知的资本和非资本“S”。解决这个问题,假设存在其他隐藏问题,应该修复问题。

注意:在Unity使用SendMessage

避免。如果你想从另一个调用脚本功能,使用GameObject.Find找到游戏对象然后GetComponent得到那么脚本中调用其功能。您也可以使用events and delegates来执行此操作。

+1

非常感谢您的回答和您的建议。我有大约4周的时间来创建HoloLens软件来可视化修复过程,并且我们从未学习任何Unity,HoloLens和3D建模。所以你的帮助非常感谢。我会把你放在我的项目的学分列表上:D –

+1

不客气。如果这是一个学校项目,不要等老师,上网并开始学习。关于Unity'[网站]的许多信息(https://unity3d.com/learn/tutorials)。 – Programmer