Я пытаюсь использовать систему распознавания речи из платформы .NET 3.0 в Unity. Поэтому я импортировал файл System.Speech.dll из .NET 3.0, так как более высокая версия не работала, в папку с активами вместе со своими зависимостями. Я знаю, что то, что я пытаюсь сделать, может не работать, потому что Unity использует .NET 2.0, но я все же хочу попробовать. Все это, кажется, работает, и я могу запустить игру штраф, но когда я запускаю его я получаю сообщение об ошибке:SpeechRecognitionEngine.InstalledRecognizers() возвращает null в Unity
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 сравнивается с .NET для Unity, см .: http://docs.unity3d.com/410/Documentation/ScriptReference/MonoCompatibility.html – user3071284