Базовая подсистема PhraseRecognitionSubsystem — MRTK3
Примечание
Общие сведения о подсистемах в MRTK3 см. здесь.
Пакет Core Definitions включает PhraseRecognitionSubsystem
, базовую реализацию MRTKSubsystem
и IPhraseRecognitionSubsystem
, который служит основой для подсистем, ответственных за распознавание ключевых слов и фраз в MRTK3. Конкретная реализация, поставляемая в составе MRTK, например WindowsPhraseRecognitionSubsystem
, и другие потенциальные подсистемы распознавания фраз, которые вы можете создать, должны быть основаны на этом классе. Подсистема, наследующая от PhraseRecognitionSubsystem
, может работать с SpeechInteractor
для активации событий выбора в StatefulInteractable
на основе параметров интерактивных объектов. Унаследованные подклассы также позволят зарегистрировать произвольные UnityAction
для ключевого слова по вашему выбору, чтобы действие выполнялось при произнесении такого слова.
Дополнительные сведения см. в документации по конкретной реализации PhraseRecognitionSubsystem
, которую вы хотите использовать.
Настройка
Примечание
В этом руководстве приведены инструкции по включению подсистемы в новом проекте MRTK (предполагается, что базовая настройка, не связанная с речью, уже выполнена). Если вы используете наш пример проекта, обратите внимание, что некоторые действия уже выполнены.
1. Включите подсистему распознавания речи
Выберите Project Settings>MRTK3Available MRTK Subsystems (Параметры проекта > MRTK3 > Доступные подсистемы MRTK) и включите нужные подсистемы распознавания речи.
2. Назначьте ресурс конфигурации (для определенных подсистем)
Для некоторых подсистем ресурс конфигурации требуется, чтобы он выполнялся нормально.
- Щелкните подсистему, включенную на шаге 1 настройки.
- Проверьте, отображается ли пустой слот
Configuration Asset
в разделе Subsystem Details (Сведения о подсистеме) справа. Если это так, создайте новую конфигурацию, выбрав Assets ->CreateMRTK>Subsystems>[имя_вашей_подсистемы] Config (Ресурсы > Создать > MRTK > Подсистемы > нужная подсистема > Настроить), а затем перетащите созданную конфигурацию в слот. - После заполнения слота конфигурации измените параметры в только что созданной конфигурации для конкретного проекта. Не забудьте сохранить проект после завершения работы.
3. Убедитесь, что объект GameObject в подсистеме речи MRTK активен (требуется для StatefulInteractable
(например, кнопок) для ответа на фразы).
Убедитесь, что параметр "Платформа MRTK XR" > "Речь MRTK" активен, а подключенный скрипт включен.
4. Убедитесь, что в параметрах проигрывателя заданы правильные возможности
Различные реализации PhraseRecognitionSubsystem
имеют разные необходимые возможности. Дополнительные сведения см. в документации по подсистеме, которую хотите использовать.
Для примера, чтобы использовать WindowsPhraseRecognitionSubsystem
на платформе UWP, выберите Project Settings>Player>Publishing Settings>Capabilities (Параметры проекта > Проигрыватель > Параметры публикации > Возможности) и убедитесь, что выбрана возможность Microphone (Микрофон).
5. Запустите сцену на устройстве или в редакторе
Теперь проект должен быть готов к запуску на устройстве или в редакторе.
Использование PhraseRecognitionSubsystem
Использование PhraseRecognitionSubsystem с StatefulInteractable
(например, кнопками)
Самый простой способ использования PhraseRecognitionSubsystem
— использовать его с StatefulInteractable
. Если выполняется шаг 3, SpeechInteractor
активирует события выбора StatefulInteractable
при выполнении условий, указанных в таких интерактивных объектах (например, произносится указанная фраза и взгляд переводится на интерактивный объект). Сведения о настраиваемых параметрах см. в инспекторе StatefulInteractable
и SpeechInteractor
("Платформа MRTK XR" > "Речь MRTK").
Использование PhraseRecognitionSubsystem вручную
Альтернативным способом использования PhraseRecognitionSubsystem
является регистрация фразы вручную и активация требуемой UnityAction
при произнесении фразы.
// Get the first running phrase recognition subsystem.
var phraseRecognitionSubsystem = XRSubsystemHelpers.GetFirstRunningSubsystem<PhraseRecognitionSubsystem>();
// If we found one...
if (phraseRecognitionSubsystem != null)
{
// Register a phrase and its associated action with the subsystem
phraseRecognitionSubsystem.CreateOrGetEventForPhrase("your phrase").AddListener(() => Debug.Log("Phrase recognized"));
}