Unity3D与C#DLL通信

Unity3D与C#DLL通信,c#,c++,.net,dll,unity3d,C#,C++,.net,Dll,Unity3d,我在Unity 3D中做一个项目,使用串行端口时,Unity内部的串行端口出现了问题。我有一个主意,但我不知道它会起作用 我打算在c#中构建一个用于unity的dll,该dll文件是串行端口驱动程序,允许unity通过类c#in unity获取数据并将数据发送到串行端口 疑问是:c#中有一个事件称为“SerialDataReceiveDevenHandler”(表示将处理SerialPort对象的DataReceived事件的方法),但似乎在使用dll文件时不会自动引发此事件 如何在dll中自动

我在Unity 3D中做一个项目,使用串行端口时,Unity内部的串行端口出现了问题。我有一个主意,但我不知道它会起作用

我打算在c#中构建一个用于unity的dll,该dll文件是串行端口驱动程序,允许unity通过类c#in unity获取数据并将数据发送到串行端口

疑问是:c#中有一个事件称为“SerialDataReceiveDevenHandler”(表示将处理SerialPort对象的DataReceived事件的方法),但似乎在使用dll文件时不会自动引发此事件

如何在dll中自动调用此方法

<>另一种选择是用Win32 API在C++中编写一个DLL文件,这将在端口通信???
谢谢。

我看到很多人报告SerialDataReceivedEventHandler出现问题。我确信,SerialPort.BytesToRead可以工作。您可以忘记SerialDataReceiveDevenHandler,而是使用SerialPort.BytesToRead实现您自己的事件系统

方法如下:

您的事件系统应该有两个事件。无法从应用程序访问的(事件A)和可以从应用程序访问的(事件B)

对于事件a,应添加SerialPort.BytesToRead以在SerialPort.BytesToRead更改其值时调用事件a

调用事件A时,它将检查串行端口.BytesToRead是否大于零。如果SerialPort.BytesToRead大于0,则需要读取新数据,然后事件B应该由事件A触发。如果SerialPort.BytesToRead为0,则不触发事件B

然后,您可以从应用程序中实现事件B,并等待它触发。当它触发时,您可以从那里读取新接收的数据

如果这对您不起作用,您可以使用您建议的dll样式来完成。Win32 API看起来很难理解。您可以从Arduino网站获取简单的SerialClass,并向其添加for功能,然后将其编译为dll。那也行。我不能在这里发布整个代码,因为它太大了,但我会在这里删除链接。这种方法的缺点是它只能在Windows上工作。要使它在Mac和Linux上工作,必须为每个平台编译一个dll。我推荐我的第一个解决方案


Unity和Unity3D是不同的标签,Unity3D是您想要的标签。不过祝你好运