【问题标题】:Why don't serial ports work properly in Unity?为什么串口在 Unity 中不能正常工作?
【发布时间】:2015-05-03 08:48:48
【问题描述】:

我需要帮助,我很绝望

在我的项目中工作了两周,这使用串行端口通信(PIC 串行板)。我必须设置连接,但无法从 COM 端口获取数据。我已经阅读了一些论坛,问题的原因似乎是 System.IO.Ports 类的不完整实现。

当我尝试获取 COM 端口的数据时,事件 SerialDataReceivedEventHandler(表示将处理 SerialPort 对象的 DataReceived 事件的方法。)没有被调用或激活。我试图解决它,但我没有找到明确的解决方案。我想证明一个外部DLL,但一个朋友告诉我问题会继续,实际上我做了并且得到了同样的问题:SerialDataReceivedEventHandler不起作用。另外,有人建议我使用辅助线程,虽然我根本不明白如何去做。

我用 Visual C# 编写了一个程序,一切正常。我很感兴趣。

我需要找到解决方案、一些想法或好的文档。如果有人对此有所了解,请帮助我。

我需要了解造成这种情况的原因才能继续。

【问题讨论】:

  • 请不要使用unity 标记与 Unity 游戏引擎相关的问题。在使用之前阅读标签的描述通常是个好主意。
  • 我有问题,在统一论坛上我读到问题是因为统一使用单声道 2.0 串行数据事件没有正确实现,所以这就是为什么事件不会触发方法。需要每X次检查一次值,或者自己做个dll来实现,不过这样比较难。

标签: unity3d serial-port


【解决方案1】:

Unity是基于Mono的,Mono没有完全实现Serial类,特别是没有实现通知(比如SerialDataReceivedEvent)。

这就是它在 Visual Studio 中工作的原因,而不是在 Unity 中。

以下是 Serial 类的 Mono 和完整 .NET 实现之间的区别:

http://www.mono-project.com/archived/howtosystemioports/#limitations提取

“限制 在撰写本文时,必须注意一些限制:

1) 接收到串口数据没有事件通知。 如果要接收数据,必须设置超时时间,并通过轮询 ReadByte( ) 当你认为可能有数据时。

2) 必须仅读取 byte[] 格式的数据——不支持 char[]。您必须自己读取字节并将其转换为您的编码。

3) DiscardNull、ParityReplace、ReceivedBytesThreshold 未实现。”

【讨论】:

    【解决方案2】:

    我认为这是因为 Unity 基于 Mono 而不是 .Net,而且它是一个相当旧的版本。由于 AOT 错误,您很长时间无法在 iOS 设备上使用 Linq,并且本地化实现存在错误(或者至少在我尝试使用的以前版本的 Unity 中)。我什至无法find the source of System.IO.Ports in the source of Unity's Mono fork,所以它完全编译是令人惊讶的。

    【讨论】:

    猜你喜欢
    • 2016-07-16
    • 2019-01-04
    • 2020-09-03
    • 2016-10-10
    • 2016-10-24
    • 2017-02-27
    • 2017-07-08
    • 2014-11-23
    • 2021-03-07
    相关资源
    最近更新 更多