【发布时间】:2015-04-25 00:42:13
【问题描述】:
我已将 IMU(陀螺仪&加速器&磁力计)连接到我的 Unity3D 项目并通过 USB 使用串行通信。
问题是,当我的脚本在游戏代码中变得不那么繁重时,串行通信会变慢 - 当来自 IMU 的值应该在某个时间点发生变化时,它们会在几秒钟后发生变化,随着时间的推移,数据流不能赶上比赛。
我正在从Update 函数调用myPort.ReadLine() 从 COM 端口读取串行数据。
解决办法是什么? - 如果我理解正确的问题,我希望串行数据读取不要等待我的应用程序的下一帧接收新值。
可以降低 IMU 设备的波特率吗?
【问题讨论】:
-
也许从
FixedUpdate试试?这只是一个 GameObject 还是您有多个对象都在尝试读取? -
只有一个专用于脚本的空游戏对象。我试过 FixedUpdate 但没有用。
-
ReadLine 是一个阻塞调用,我会避免在游戏中使用阻塞 I/O。在读取之前是否验证有一定数量的数据要读取?您是否阅读了所有可用的行(循环直到 BytesToRead == 0)?
-
不,我不知道。我很欣赏如何在游戏中有效地从串行端口读取数据的示例。顺便说一句,我正在为不同的交互式设备使用 2 个 USB 端口。我认为这应该不是什么大问题。
-
我将创建一个带有线程的插件,该线程将读取和写入串行端口,然后您可以毫无问题地进行阻塞调用,并使用环形缓冲区来处理与 update() 调用之间的数据传输.速度不会受到影响,但是当游戏消耗大量 CPU 时,您可能需要更大的环形缓冲区以免丢失数据。我还会将此线程置于更高的优先级,以便在有新数据可用时立即响应!
标签: c# unity3d serial-port serial-communication