7 #if UNITY_WSA || UNITY_STANDALONE_WIN 28 [Tooltip(
"Keywords are persistent across all scenes. This Speech Input Source instance will not be destroyed when loading a new scene.")]
36 [Tooltip(
"Whether the recognizer should be activated on start.")]
39 [Tooltip(
"The keywords to be recognized and optional keyboard shortcuts.")]
42 #if UNITY_WSA || UNITY_STANDALONE_WIN 44 [Tooltip(
"The confidence level for the keyword recognizer.")]
47 private ConfidenceLevel recognitionConfidenceLevel = ConfidenceLevel.Medium;
49 private KeywordRecognizer keywordRecognizer;
53 protected virtual void Start()
55 if (PersistentKeywords)
57 gameObject.DontDestroyOnLoad();
60 int keywordCount = Keywords.Length;
63 var keywords =
new string[keywordCount];
65 for (
int index = 0; index < keywordCount; index++)
67 keywords[index] = Keywords[index].
Keyword;
70 keywordRecognizer =
new KeywordRecognizer(keywords, recognitionConfidenceLevel);
71 keywordRecognizer.OnPhraseRecognized += KeywordRecognizer_OnPhraseRecognized;
75 keywordRecognizer.Start();
80 Debug.LogError(
"Must have at least one keyword specified in the Inspector on " + gameObject.name +
".");
84 protected virtual void Update()
86 if (keywordRecognizer != null && keywordRecognizer.IsRunning)
92 protected virtual void OnDestroy()
94 if (keywordRecognizer != null)
96 StopKeywordRecognizer();
97 keywordRecognizer.OnPhraseRecognized -= KeywordRecognizer_OnPhraseRecognized;
98 keywordRecognizer.Dispose();
102 protected virtual void OnDisable()
104 if (keywordRecognizer != null)
106 StopKeywordRecognizer();
110 protected virtual void OnEnable()
114 StartKeywordRecognizer();
118 #endregion // Unity Methods 120 #region Event Callbacks 122 private void KeywordRecognizer_OnPhraseRecognized(PhraseRecognizedEventArgs args)
124 OnPhraseRecognized(args.confidence, args.phraseDuration, args.phraseStartTime, args.semanticMeanings, args.text);
127 #endregion // Event Callbacks 133 public void StartKeywordRecognizer()
135 if (keywordRecognizer != null && !keywordRecognizer.IsRunning)
137 keywordRecognizer.Start();
141 private void ProcessKeyBindings()
143 for (
int index = Keywords.Length; --index >= 0;)
145 if (Input.GetKeyDown(Keywords[index].
KeyCode))
147 OnPhraseRecognized(recognitionConfidenceLevel, TimeSpan.Zero, DateTime.Now, null, Keywords[index].
Keyword);
156 public void StopKeywordRecognizer()
158 if (keywordRecognizer != null && keywordRecognizer.IsRunning)
160 keywordRecognizer.Stop();
164 protected void OnPhraseRecognized(ConfidenceLevel confidence, TimeSpan phraseDuration, DateTime phraseStartTime, SemanticMeaning[] semanticMeanings,
string text)
166 InputManager.
Instance.RaiseSpeechKeywordPhraseRecognized(
this, 0, confidence, phraseDuration, phraseStartTime, semanticMeanings, text);
171 #region Base Input Source Methods 181 position = Vector3.zero;
187 rotation = Quaternion.identity;
193 pointingRay =
default(Ray);
199 position = Vector3.zero;
205 rotation = Quaternion.identity;
214 public override bool TryGetThumbstick(uint sourceId, out
bool isPressed, out Vector2 position)
217 position = Vector2.zero;
221 public override bool TryGetTouchpad(uint sourceId, out
bool isPressed, out
bool isTouched, out Vector2 position)
225 position = Vector2.zero;
229 public override bool TryGetSelect(uint sourceId, out
bool isPressed, out
double pressedAmount)
236 public override bool TryGetGrasp(uint sourceId, out
bool isPressed)
242 public override bool TryGetMenu(uint sourceId, out
bool isPressed)
248 #endregion // Base Input Source Methods