MRTK V2.2 - 通过脚本访问语音命令

MRTK V2.2 - Access Speech Command via Script

在我的场景中,按钮是在运行时创建的。这些将通过语音命令单击。出于这个原因,我试图找出如何在运行时添加语音命令。但是我找不到任何方法。

我试过的: 我用两种方法扩展了接口 IMixedRealitySpeechSystemRefreshRecognitionAddSpeechCommand:

/// <summary>
/// Refresh recognition after adding new commands
/// </summary>
void RefreshRecognition();

/// <summary>
/// Add command to already existing commands[]
/// </summary>
/// <param name="command"></param>
void AddSpeechCommand(SpeechCommands command);

我已经在 class WindowsSpeechInputProvider: MixedRealitySpeechSystem 中实现了这些。但是有两个问题。

首先:我无法访问 WindowsSpeechInputProvider。我以为我可以通过尝试得到它:

private IMixedRealitySpeechSystem SpeechSystem
{
    get
    {
        if(_speechSystem is null)
        {
            MixedRealityServiceRegistry.TryGetService(out _speechSystem);
        }
        return _speechSystem;
    }
}

public void SomeMethod()
{
    SpeechCommands command = new SpeechCommands("TestCommand", default, default, null);
    SpeechSystem.AddSpeechCommand(command);
    SpeechSystem.RefreshRecognition();
}

但问题是 MixedRealityServiceRegistry 不包含该服务的实例,或者准确地说,它甚至不是服务。

其次:即使这样行​​得通,也不是一个好办法。因为我更改了 MRTK 并再次升级到新版本,所以这些行被覆盖了。

我的问题:
那么如何在运行时访问和添加命令?

有一个允许在 Github 中添加动态语音命令的开放功能请求:Add keywords dynamically to MRTK speech commands #6369. 目前不可能。

此线程对处理整个场景的替代方法有一些建议。总之,建议您使用语法识别器并使用 SRGS XML 文件来定义您的语音识别规则。 Voice input in Unity and Hologram 212 有一个演示如何使用它的示例。