【发布时间】:2015-12-18 07:25:35
【问题描述】:
我正在尝试在 Unity 中使用 .NET 3.0 框架中的语音识别系统。因此,我从 .NET 3.0 导入了 System.Speech.dll,因为更高版本不起作用,连同它的依赖项一起进入 assets 文件夹。我知道我正在尝试做的事情可能行不通,因为 Unity 使用 .NET 2.0,但我仍然想尝试一下。一切似乎都正常,我可以正常运行游戏,但是当我运行它时出现错误:
NullReferenceException: Object reference not set to an instance of an object
System.Speech.Internal.ObjectTokens.RegistryDataKey.HKEYfromRegKey (Microsoft.Win32.RegistryKey regKey)
System.Speech.Internal.ObjectTokens.RegistryDataKey.RootHKEYFromRegPath (System.String rootPath)
System.Speech.Internal.ObjectTokens.RegistryDataKey.Open (System.String registryPath, Boolean fCreateIfNotExist)
System.Speech.Internal.ObjectTokens.ObjectTokenCategory.Create (System.String sCategoryId)
System.Speech.Recognition.SpeechRecognitionEngine.InstalledRecognizers ()
VoiceCommandListener.Start () (at Assets/Scripts/VoiceCommandListener.cs:14)
代码行是:
SpeechRecognitionEngine speechRecognitionEngine = new SpeechRecognitionEngine(SpeechRecognitionEngine.InstalledRecognizers()[0]);
当我在 Unity 之外运行同一行代码时,它可以正常工作并且只获取默认和第一个识别器,但不知何故它在 Unity 中不起作用。
我尝试在使用 .NET 2.0 而不是 .NET 2.0 子集之间切换,切换到 Microsoft.Speech.Recognition 并导入 Microsoft.Speech.dll 也不起作用,并给出了相同类型的错误。 我还尝试运行以下代码块:
SpeechRecognitionEngine speechRecognitionEngine = null;
foreach (RecognizerInfo info in SpeechRecognitionEngine.InstalledRecognizers()) {
if (info.Culture.Equals(requiredCulture) && info.Id == requiredId ) {
speechRecognitionEngine = new SpeechRecognitionEngine(info);
break;
}
}
这给出了相同的结果,这一次再次出现在使用“SpeechRecognitionEngine.InstalledRecognizers()”的代码行。
有人知道为什么它不返回任何东西吗?
切换到 Microsoft.Speech.Recognition 并导入 Microsoft.Speech.dll 也不起作用,并出现相同类型的错误。
提前致谢。
罗恩
【问题讨论】:
-
Unity 使用 Mono 而不是 .NET。有关 Mono 与 Unity .NET 比较的信息,请参阅:docs.unity3d.com/410/Documentation/ScriptReference/…
标签: .net dll unity3d nullreferenceexception speech