2016-01-16 27 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