【问题标题】:SendMessage doesn't launch function (HoloLens/Unity/C#)SendMessage 不启动功能 (HoloLens/Unity/C#)
【发布时间】:2017-06-01 12:11:02
【问题描述】:

目标:使用听觉控制从一个场景切换到另一个场景。

问题:在 HoloLens Emulator 中启动应用程序时,会打开第一个场景。在说“下一步”时,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.发布您的代码而不是屏幕截图。 2.使用UnityEngine.Debug.Log 而不是System.Diagnostics.Debug.WriteLine。使用 Debug.Log,您现在可以告诉我们哪个功能无法正常工作。告诉我们OnNextstep 是否被调用。
  • 已添加代码。 OnNextStep 未被调用。
  • 这里也不需要SendMessage。您可以直接调用该方法:keywords.Add("Next Step", () =&gt; { OnNextStep(); }); Whiiich 会产生指出方法名称不完全匹配的副作用。 ;)

标签: c# unity3d hololens hololens-emulator


【解决方案1】:

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

您的函数名称是OnNextstep,但您正在调用OnNextStep

SendMessage("OnNextStep", SendMessageOptions.DontRequireReceiver);

注意大写和非大写的“S”。修复它,假设还有其他隐藏的问题,您的问题应该得到修复。

注意

避免在 Unity 中使用 SendMessage。如果您想从另一个脚本调用函数,请使用 GameObject.Find 查找 GameObject,然后使用 GetComponent 获取该脚本,然后调用其函数。您也可以使用events and delegates 来执行此操作。

【讨论】:

  • 非常感谢您的回答和建议。我有大约 4 周的时间来创建 HoloLens 软件来可视化修复过程,我们从未研究过任何 Unity、HoloLens 或 3D 建模。因此,非常感谢您的帮助。我会把你列入我项目的学分名单:D
  • 不客气。如果这是一个学校项目,不要等老师,上网开始学习。许多关于 Unity 的信息'website
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多