2017-06-01 14 views
3

ゴール:オーディタリーコントロールを使用してシーンを切り替える。SendMessageが機能しない(HoloLens/Unity/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.スクリーンショットではないコードを投稿します。 「Unity.Debug.Log」はSystem.Diagnostics.Debug.WriteLineではなく、「UnityEngine.Debug.Log」を使用してください。 Debug.Logを使用すると、どの機能が正しく動作していないかを知ることができます。 OnNextstepがat-allで呼び出されているかどうかを教えてください。 – Programmer

+0

コードが追加されました。 OnNextStepは呼び出されません。 –

+1

ここでも 'SendMessage'は必要ありません。このメソッドを直接呼び出すことができます: 'keywords.Add(" Next Step "、()=> { OnNextStep(); });'メソッド名が正確に一致する。 ;) – Draco18s

答えて

4

ユニティのSendMessage関数は、呼び出し関数については大文字と小文字を区別します。

あなたの関数名はOnNextstepですが、あなたはOnNextStepを呼び出している:資産化と非が"S"を大文字

SendMessage("OnNextStep", SendMessageOptions.DontRequireReceiver); 

注意してください。それを修正し、他の隠された問題があると仮定して問題を修正する必要があります。

ユニティでSendMessageを使用しないでください。他のスクリプトから関数を呼び出す場合は、GameObject.Findを使用してGameObject、次にGetComponentを見つけてそのスクリプトを呼び出してください。これを行うにはevents and delegatesを使用することもできます。

+1

お返事ありがとうございました。修理プロセスを視覚化するためにHoloLensソフトウェアを作成するのにおよそ4週間かかりました。私たちはUnityやHoloLens、3Dモデリングについて何も学んでいませんでした。だからあなたの助けは非常に高く評価されます。私は私のプロジェクトのクレジットリストにあなたを載せます:D –

+1

あなたは大歓迎です。これが学校プロジェクトの場合は、先生を待つことなく、オンラインで学習を始めてください。 Unityの[website]に関する多くの情報(https://unity3d.com/learn/tutorials)。 – Programmer

関連する問題