在Unity进程和另一个C#进程之间进行本地IPC的最快方法

5

我希望能够从一个C#应用程序每秒传输大约30次的大量数据到我的Unity应用程序。由于Unity不支持映射内存和管道,所以我考虑使用TCP套接字。如果通信仅限于一台机器,这样做是否足够快?


2
“huge” amount是什么意思?你可以编写一个简单的测试程序来测量结果。 - Skyblade
1个回答

7

可能从2017年开始,Unity还支持托管插件


Unity3D也支持c++。

本地插件是特定于平台的本机代码库。它们可以访问诸如操作系统调用和第三方代码库等功能,这些功能在其他情况下对Unity不可用。但是,这些库无法像托管库那样通过Unity的工具进行访问。例如,如果您忘记将托管插件文件添加到项目中,则会收到标准的编译器错误消息。如果您使用本地插件做同样的事情,只有在尝试运行项目时才会看到错误报告。 更多...

...并且:

Unity对本地插件提供了广泛的支持,它们是用C、C++、Objective-C等编写的本机代码库。插件允许您的游戏代码(使用Javascript或C#编写)调用这些库中的函数。此功能允许Unity与中间件库或现有的C/C++游戏代码集成。 更多...

使用c++代码,您可以自由地做任何想做的事情,包括编写本机命名管道服务器,通过该服务器,您的c#应用程序可以发送数据。

本地命名管道非常快,因为它们在内核模式下运行,并且不像TCP那样经过网络层。

如果通信仅用于本地计算机,则建议使用命名管道而不是TCP。

替代方案

命名管道的替代方案包括:

  • COM
  • DDE
  • 文件映射(包括共享内存,感谢Ben!)
  • 邮槽

告诉我更多...


C++还支持共享内存,这可能会更快(并在问题中提到)。本地插件是实现这一点的好方法,但不清楚安全设置是否会阻止它们的使用。 - Ben Voigt
@BenVoigt 同意。 包括在内。 - user585968
感谢您详细的回答。 - lassedev
你确定Unity支持命名管道吗?据我所知,Mono没有实现命名管道的功能。 - BooNonMooN
@BooNonMooN,你需要使用本地方式来完成它。 - user585968
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接