2016-01-16 38 views
0

我有一個用C#編寫的巨大項目,使用.Net 3.5 我需要爲我的項目使用Unity3D。我試圖將Unity導入到我的項目中,但我發現這是不可能的。所以,現在我想將我用C#編寫的代碼導入Unity。我使用我已有的代碼創建了一個庫,將其導入Unity並使用它。但是,當我嘗試導入它時,我收到以下錯誤:在Unity5中使用.Net庫

Unhandled Exception: System.TypeLoadException: Could not load type 'SpeechTools.ClsSpeechSynthesis' from assembly 'MySpeechSynthesizer, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'. Could not load file or assembly 'System.Speech, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies.

我正在使用System.Speech在我的庫中。 Unity(Mono)不支持它。我猜這個問題是由這個依賴造成的。

誰能幫助我?有沒有辦法在System.Speech.SpeechSynthesizer中編寫一個包裝並在Unity中使用它?

我在網上搜索,我發現了很多關於編寫C++代碼包裝的教程,但沒有任何c#和.Net庫。

+0

在微服務時代,您可以輕鬆編寫微服務並在.NET Framework 3.5上運行它(爲什麼不升級到.NET 4.5.2及更高版本?),然後在Unity應用程序中使用該服務。真的沒有必要將它們合併在一起,並打出這樣的無人關懷問題。 –

+0

那麼你建議我寫一個服務並統一使用它?而不是試圖圍繞system.speech寫封裝? – FSFisGOOD

回答

0

System.Speech不支持Unity的Mono版本,所以你運氣不好。你也不能只是放入Windows版本的System.Speech DLL,因爲它可能不適用於Unity的Mono版本。

你不能編寫使用System.Speech的C#包裝器DLL,因爲它基本上與直接丟棄DLL相同。Unity的Mono將嘗試加載它並失敗。

您必須找到一個實現所需功能的本機庫並編寫一個包裝器,或者完全用C#編寫一個實現。

您可能會在C#DLL中編寫一個本機包裝(即C++)。該包裝將初始化CLR並加載C#DLL。然後,在Unity中引用本機包裝器。您將不得不通過這個本機包裝公開整個System.Speech API。我認爲這是可行的,但它很麻煩,只適用於Windows或可用.NET的平臺(即沒有網絡播放器,手機,Linux,OS X)。

+0

是否可以爲system.speech編寫一個包裝並將其用於統一? – FSFisGOOD