【find-color踩坑记录】unity+arduino链接问题
作品链接:https://www.bilibili.com/video/BV16T4y1T71w?from=search&seid=10682243996713984948
碰到的问题
1.陀螺仪和unity的传输,传输的是数据流,这边接受到的是动态的数据,要如何进行数据同步?
解决方案:后建立缓冲区,并且分割字符串,进行传输。使用正则表达式分离字符串和数据而后转为数组:动态的数据是一个瀑布流,在做split操作的时候,我们是有一个100的队列。不断的split100个队列里的数据,然后频率每1/115200就推出一次,推进或者扔掉(这一步在其他脚本)。
2.传输脚本不稳定,该如何解决?
解决方案:最后找到了效果比较好的插件,自写的脚本不太稳定,能用但是老是会偶尔崩溃。后来找到了这个插件,试验后传输稳定,使用了unity和arduino的传输插件ardity。这个是真的不戳
3.碰撞体旋转过快会出现识别问题,导致穿模?
我们减小了旋转角度,使得识别能够更加稳定。此问题还有可更新的空间。
(四)解决问题心得:
- unity和arduino代码的链接,使用的时候是在一个频率相同的端口链接,这次我需要的是arduino上传数据,然后unity读取数据。
- 在arduino那边是读取陀螺仪的数据,传过来,但是发现每次打开unity后运行arduino,aruidno就会报这个错
![]()
- 打开arduino之后,再运行unity就会有这个错
![]()
- 一开始觉得是串口冲突的问题,然后上网找了很多解决串口冲突的问题,比如互斥锁或者临界区。
- 但是最后发现是自己对arduino的串口监视器理解有问题:
- Arduino的串口监视器是读取了COM3(或者其他串口)里面的数据呈现出来,而不是上传数据的数据显示。arduino的串口监视器会占用串口!并不是上传信息!而是在读取信息流!
- 所以说打开arduino的时候,先上传,然后不能打开串口监视器,打开unity的控制台,再进行连接感应器!
- 再进行Unity脚本和脚本之间的传输。感觉自己像个傻瓜
然后是数据在unity之间的传输
把要获取的变量权限定义为public 类型 变量.
以下方法任意一个都可以:
一:
public GameObject 另一个物体; //监视面板拖拽赋值
另一个物体.GetComponent<脚本>().变量 获得并更改.
二:
将另一个物体命名为"XXX".
GameObject.Find("XXX").GetComponent<脚本>().变量;
三:
将另一个物体命名为"XXX";
GameObject.FindGameObjectWithTag("XXX").GetComponent<脚本>().变量;
四、调用同一个物体另外一个脚本的变量方法GetComponent<YearAnimation>().Aniamtion();
- 这个游戏使用了陀螺仪的欧拉角来进行控制
a) 姿态角/欧拉角 在数学上理解起来会有点抽象,我也是稍理解一点。
b) 俯仰角θ(pitch):围绕Y轴旋转的。
c) 偏航角ψ(yaw):围绕Z轴旋转的角度。
d) 滚转角Φ(roll):围绕X轴旋转的角度。

- 使用正则表达式分离字符串和数据而后转为数组:动态的数据是一个瀑布流,在做split操作的时候,我们是有一个100的队列。
不断的split100个队列里的数据,然后频率每1/115200就推出一次,推进或者扔掉(这一步在其他脚本)。
ypr = msg.Split(','); // split message by commas and store in Strin yaw = float.Parse(ypr[0]);
ps:做工正忙的时候,发现键盘用不了,后来到处找为啥的时候发现联想是fn+f8锁键盘用不了,我服了,这个设计也太拉跨了把,为啥要设计这个。这种东西应该搞个提示框以防止误触


浙公网安备 33010602011771号