单声道在统一3d和.net远程处理

时间:2013-05-02 16:47:33

标签: c# mono unity3d remoting

我正在开发一个Unity项目,我需要使用远程客户端。我创建了一个接口类,我在其他Unity项目中使用了远程服务器。

当服务器正常运行时,客户端的创建失败,并出现以下异常:

  

System.TypeInitializationException:System.Runtime.Remoting.Channels.SocketCache --->的类型初始值设定项引发了异常。 System.NotImplementedException:未实现所请求的功能。     在System.Threading.ThreadPool.UnsafeRegisterWaitForSingleObject(System.Threading.WaitHandle waitObject,System.Threading.WaitOrTimerCallback callBack,System.Object state,TimeSpan timeout,Boolean executeOnlyOnce)[0x00000] in:0

我的客户代码:

MyRemotableObject remoteObject;

void Awake ()
{
    try
    {
        TcpChannel chan = new TcpChannel();
        ChannelServices.RegisterChannel(chan, false);
        remoteObject = (MyRemotableObject)Activator.GetObject(typeof(MyRemotableObject), "tcp://localhost:124/TargetShooterMenu");
    }
    catch (Exception e)
    {
        Debug.LogError(e.ToString());
    }
....

有谁知道如何解决这个问题? 根据{{​​3}},Mono应该有远程支持。 我在Windows 7 x64 Professional机器上使用Unity 3.5.1(应该有Mono 2.6.3)。

提前致谢

2 个答案:

答案 0 :(得分:1)

我正在使用Unity做同样的事情。

您要做的第一件事是将播放器Api兼容级别从“.Net 2.0子集”更改为“.Net 2.0”

接下来你必须从MonoDevelop获得2.0单声道库“System.Runtime.Remoting.dll”

我的位于“/Applications/Unity/MonoDevelop.app/Contents/Frameworks/Mono.framework/Libraries/mono/2.0/System.Runtime.Remoting.dll”

将其放入“Assets / Plugins”文件夹中,Unity将负责拖出其余的库。

从那时起,似乎远程工作毫无障碍:)

如果你添加Remoting dll和build只是为了找到类似“但是不允许包含或无法找到dll”的错误,那么你仍然使用“.Net 2.0 Subset”

答案 1 :(得分:0)

这里有两个选项:

  1. 使用的.NET子集不支持它。在播放器设置中切换2.0子集和完整2.0并再次测试
  2. 如果这没有用,那么我担心除了使用DLLImport实现自己的协议或使用真正的本机代码之外,你无法做任何事情。这里的问题是不安全的代码依赖,在Unity中通常被禁用并从其自定义Mono版本(基于Mono 2.6)中删除。 Unity既不支持也不使用系统Mono版本,因此基于这些的任何测试和假设在这种情况下都无关紧要。