2017-06-01 6 views
3

Ziel: Wechseln von einer Szene zur anderen mit Hilfe von Audio-Steuerelementen.SendMessage startet keine Funktion (HoloLens/Unity/C#)

Problem: Beim Start der Anwendung im HoloLens Emulator öffnet sich die erste Szene. Wenn "Next Step" gesagt wird, erkennt der HoloLens den Satz, aber die sendMessage öffnet die OnNextStep() Funktion nicht.

Vielen Dank für versuchen zu helfen! :)

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.Post Ihren Code nicht Screenshot. 2.Verwenden Sie 'UnityEngine.Debug.Log' nicht' System.Diagnostics.Debug.WriteLine'. Mit Debug.Log können Sie uns jetzt sagen, welche Funktion nicht richtig funktioniert. sagen Sie uns, ob 'OnNextstep' an allen angerufen wird. – Programmer

+0

Code wurde hinzugefügt. OnNextStep wird NICHT aufgerufen. –

+1

Sie brauchen auch nicht 'SendMessage' hier. Sie können die Methode einfach direkt aufrufen: 'keywords.Add (" Nächster Schritt ",() => { OnNextStep(); });' Das hätte den Nebeneffekt, dass der Methodenname nicht angezeigt wird genau übereinstimmen. ;) – Draco18s

Antwort

4

Unity SendMessage Funktion Groß- und Kleinschreibung, wenn es um Anruffunktionen kommt.

Ihre Funktionsname ist OnNextstep aber Sie anrufen OnNextStep:

SendMessage("OnNextStep", SendMessageOptions.DontRequireReceiver); 

Beachten Sie die aktivierten und nicht aktivierten "S". Beheben Sie das und Ihr Problem sollte behoben werden, vorausgesetzt, es gibt andere versteckte Probleme.

Hinweis:

Vermeiden SendMessage in Unity verwenden. Wenn Sie eine Funktion von einem anderen Skript aufrufen möchten, verwenden Sie GameObject.Find die Gameobject dann GetComponent zu finden, dass Skript erhalten dann seine Funktion aufrufen. Sie können dazu auch events and delegates verwenden.

+1

Vielen Dank für die Antwort und Ihren Rat. Ich habe ungefähr 4 Wochen, um HoloLens Software zu erstellen, um einen Reparaturprozess zu visualisieren und wir haben nie etwas Unity, HoloLens oder 3D Modellierung studiert. Ihre Hilfe wird sehr geschätzt. Ich werde dich auf die Credits-Liste meines Projekts setzen: D –

+1

Gern geschehen. Wenn dies ein Schulprojekt ist, warten Sie nicht auf den Lehrer, gehen Sie online und fangen Sie an zu lernen. Viele Informationen zur Unity-Website (https://unity3d.com/learn/tutorials). – Programmer

Verwandte Themen