unity3d中串口的使用
工作中遇到了串口的问题,通过查资料&实验写出了下面代码;
关于串口的代码我在网上看了好多,一种是用事件来做,另外一种使用线程来做;(经过试验,unity无法用串口自带的事件进行数据读取);
看完以后,个人感觉比较麻烦,所以就用了下面的方式;
PS:也可以改成用IEnumerator 或者Invoke来写
1 using UnityEngine; 2 using System.Collections; 3 using System.IO.Ports; 4 using System; 5 using System.Text; 6 7 public class ProtTest : MonoBehaviour 8 { 9 //串口 10 private SerialPort port = new SerialPort(); 11 //用于读取缓存区数据 12 private byte[] readBuffer; 13 //缓存byte转化的string 14 private string byteConvertSave; 15 //缓存没有用过的数据 16 private string portDataSave = ""; 17 //缓存依照约定拆解的字符串 18 private string[] portDataSplit; 19 //缓存有效数据 20 private string validData = ""; 21 22 private void Awake() 23 { 24 InitProp(); 25 } 26 27 /// <summary> 28 /// 初始化串口 29 /// </summary> 30 private void InitProp() 31 { 32 port.PortName = "COM3"; 33 port.BaudRate = 9600; 34 port.Parity = Parity.None; 35 port.DataBits = 8; 36 port.StopBits = StopBits.One; 37 port.Open(); 38 } 39 40 void Update() 41 { 42 HandleProtData(); 43 DoSomething(); 44 } 45 46 /// <summary> 47 /// 接收处理串口字符串,将字符串转换为标准形式 48 /// </summary> 49 private void HandleProtData() 50 { 51 if (!port.IsOpen) 52 { 53 return; 54 } 55 56 //读取串口数据 57 readBuffer = new byte[port.ReadBufferSize]; 58 try 59 { 60 int count = port.Read(readBuffer, 0, port.ReadBufferSize); 61 //转化成字符串 62 byteConvertSave = Encoding.ASCII.GetString(readBuffer, 0, count); 63 if (count != 0) 64 { 65 //保存字符串 66 portDataSave += byteConvertSave; 67 } 68 } 69 catch (TimeoutException) 70 { 71 } 72 73 //拆解字符串 74 portDataSplit = portDataSave.Split('\n');//按照约定规则 75 76 /* 下面这样做是因为串口传过来的字符串不一定是完整的 77 * 比如说,正常的数据是 78 * 第一次传输a,b,c,d; 79 * 第二次传输c,f,b,g; 80 * 可能传过来的数据就变成了 81 * 第一次传输a,b,c,d;c,f 82 * 第二次传输,b,g; 83 */ 84 if (portDataSplit.Length > 1) 85 { 86 //倒数第二个数据是有效数据,因为是完整的 87 validData = portDataSplit[portDataSplit.Length - 2]; 88 //及时清除无用数据 89 //将当前未使用的数据更新为倒数第一个数据 90 portDataSave = portDataSplit[portDataSplit.Length - 1]; 91 } 92 } 93 94 /// <summary> 95 /// 做什么东西 96 /// </summary> 97 private void DoSomething() 98 { 99 CheckData(); 100 } 101 102 /// <summary> 103 /// 检查数据是否符合规则 104 /// </summary> 105 /// <returns></returns> 106 private bool CheckData() 107 { 108 return false; 109 } 110 }
PS:最后说一下遇到的问题和解决方法:
问题:那就是找不到SerialProp这个类,当我引入using System.IO.Ports的时候,报错说找不到该命名空间。
解决方法:playersetting里面Api Compatibility Level 选择 .NET2.0而不是 .NET2.0 SubSet。
转载于:https://www.cnblogs.com/singledigit/p/5568871.html
unity3d中串口的使用相关推荐
- 【Unity3D软硬件】Unity3D与串口通信 SerialPort类完全教程
推荐阅读 CSDN主页 GitHub开源地址 Unity3D插件分享 简书地址 我的个人博客 QQ群:1040082875 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有 ...
- Unity3D 中 2D_Toolkit插件下载 和 导入方法
Unity3D 中 2D_Toolkit插件下载 和 导入方法 1.你把下载来的包放到 安装目录:Editor\Standard Packages里面. 2.然后按ctrl+9,进入asset sto ...
- Unity3D中暂停时的动画及粒子效果实现
暂停是游戏中经常出现的功能,而Unity3D中对于暂停的处理并不是很理想.一般的做法是将Time.timeScale设置为0.Unity的文档中对于这种情况有以下描述: The scale at wh ...
- C# 中串口通信 serialport1.DataReceived 函数无法触发或者出发延时等等问题解决方法
C# 中串口通信 serialport1.DataReceived 函数无法触发或者出发延时等等问题解决方法 参考文章: (1)C# 中串口通信 serialport1.DataReceived 函数 ...
- C#中串口通信编程 收藏
C#中串口通信编程 收藏 本文将介绍如何在.NET平台下使用C#创建串口通信程序,.NET 2.0提供了串口通信的功能,其命名 空间是System.IO.Ports.这个新的框架不但可以访问计算机上的 ...
- Unity3D 中的程序后台运行
Unity3D中程序后台运行,我原本认为当Application.runInBackground=false时,Socket保持连接,但是不接受数据,经过测试并非如此,当Application.run ...
- 工具设置Unity3D系列教程--使用免费工具在Unity3D中开发2D游戏 第一节
时间紧张,先记一笔,后续优化与完善. 声明: 本博客文章翻译类别的均为个人翻译,版权全部.转载请注明出处: http://blog.csdn.net/ml3947,另外本人的个人博客:http:/ ...
- 求android 中串口的发送接收数据代码
RT,求高手帮忙! 就是 /dev/ttyS0 和/dev/ttyS1 两个设备的通信问题.. 同求~ 这个是不是需要串口驱动啊?最近正在搞这个串口通信的案子,头疼 同样也没有搞出来,老是报:不能扫描 ...
- unity3d中让物体显示和隐藏
unity3d中让物体显示和隐藏的方法 gameObject.renderer.enabled //是控制一个物体是否在屏幕上渲染或显示 而物体实际还是存在的 仅仅是想当于隐身 而物体本身的碰撞体还 ...
- Unity3d中BlinnPhong光照模型注解
/* * 版本:0.1 最后修改:2012-08-10 撰写:李现民 Unity3D中主要用到的shader(着色器)有三种,除了常规的vertex shader与fragme ...
最新文章
- 复化梯形公式,Newton-Cotes公式,变量代换后的复化梯形公式,Gauss-Legendre公式,Gauss-Jacobi公式插值积分的精确度比较
- 第三十五课.基于贝叶斯的深度学习
- 配置IPsec Tunnel With TACACS+ User Authentication
- 马自达新车全面取消触摸屏,意外引得叫好声一片
- Mybatis一对一结果映射
- 产品经理经验谈100篇(一)-一个经销商订单贷的业务设计
- 排序算法Java实现(基数排序)
- 2019计算机国二操作题,2019年3月计算机二级C++操作练习题及答案(十二)
- 努力的钻研深层次的【飞鸽传书】技术
- java 调用 c# webservice 压缩 Liststring示例
- 防止各大网盘下载限速解决方案--idman
- 第八届山东省ACM大学生程序设计竞赛总结
- 社科院与杜兰大学金融管理硕士——在自己的领域努力拼搏,终将遇到专属的光芒
- h2o flow初探
- BTC钱包(wallet.dat 文件密码与私钥的区别)
- 定位的坑:class属性有空格
- 一维数组和二维数组的定义及用法
- [实用教程] 科普贴:SGLTE、SVLTE、CSFB、SRLTE
- 平阳县抖音平台直播运营主播带货第三期培训提升班开班啦!
- HNU程序设计-图书馆信息管理系统设计以及实验报告