unity3d中串口的使用
工作中遇到了串口的问题,通过查资料&实验写出了下面代码;
关于串口的代码我在网上看了好多,一种是用事件来做,另外一种使用线程来做;(经过试验,unity无法用串口自带的事件进行数据读取);
看完以后,个人感觉比较麻烦,所以就用了下面的方式;
PS:也可以改成用IEnumerator 或者Invoke来写
using UnityEngine;
using System.Collections;
using System.IO.Ports;
using System;
using System.Text; public class ProtTest : MonoBehaviour
{
//串口
private SerialPort port = new SerialPort();
//用于读取缓存区数据
private byte[] readBuffer;
//缓存byte转化的string
private string byteConvertSave;
//缓存没有用过的数据
private string portDataSave = "";
//缓存依照约定拆解的字符串
private string[] portDataSplit;
//缓存有效数据
private string validData = ""; private void Awake()
{
InitProp();
} /// <summary>
/// 初始化串口
/// </summary>
private void InitProp()
{
port.PortName = "COM3";
port.BaudRate = ;
port.Parity = Parity.None;
port.DataBits = ;
port.StopBits = StopBits.One;
port.Open();
} void Update()
{
HandleProtData();
DoSomething();
} /// <summary>
/// 接收处理串口字符串,将字符串转换为标准形式
/// </summary>
private void HandleProtData()
{
if (!port.IsOpen)
{
return;
} //读取串口数据
readBuffer = new byte[port.ReadBufferSize];
try
{
int count = port.Read(readBuffer, , port.ReadBufferSize);
//转化成字符串
byteConvertSave = Encoding.ASCII.GetString(readBuffer, , count);
if (count != )
{
//保存字符串
portDataSave += byteConvertSave;
}
}
catch (TimeoutException)
{
} //拆解字符串
portDataSplit = portDataSave.Split('\n');//按照约定规则 /* 下面这样做是因为串口传过来的字符串不一定是完整的
* 比如说,正常的数据是
* 第一次传输a,b,c,d;
* 第二次传输c,f,b,g;
* 可能传过来的数据就变成了
* 第一次传输a,b,c,d;c,f
* 第二次传输,b,g;
*/
if (portDataSplit.Length > )
{
//倒数第二个数据是有效数据,因为是完整的
validData = portDataSplit[portDataSplit.Length - ];
//及时清除无用数据
//将当前未使用的数据更新为倒数第一个数据
portDataSave = portDataSplit[portDataSplit.Length - ];
}
} /// <summary>
/// 做什么东西
/// </summary>
private void DoSomething()
{
CheckData();
} /// <summary>
/// 检查数据是否符合规则
/// </summary>
/// <returns></returns>
private bool CheckData()
{
return false;
}
}
PS:最后说一下遇到的问题和解决方法:
问题:那就是找不到SerialProp这个类,当我引入using System.IO.Ports的时候,报错说找不到该命名空间。
解决方法:playersetting里面Api Compatibility Level 选择 .NET2.0而不是 .NET2.0 SubSet。
unity3d中串口的使用的更多相关文章
- 【Unity3d游戏开发】Unity3D中的3D数学基础---向量
向量是2D.3D数学研究的标准工具,在3D游戏中向量是基础.因此掌握好向量的一些基本概念以及属性和常用运算方法就显得尤为重要.在本篇博客中,马三就来和大家一起回顾和学习一下Unity3D中那些常用的3 ...
- Unity3D中可中途释放的单例
Unity3D中可中途释放的单例 使用静态类,静态变量的坏处是从程序加载后就一直占用内存,想要释放比较麻烦,可是之前使用的单例,没有提供释放的方法,那是不是也同静态的一样直到程序结束菜释放?那单例的好 ...
- 图文详解Unity3D中Material的Tiling和Offset是怎么回事
图文详解Unity3D中Material的Tiling和Offset是怎么回事 Tiling和Offset概述 Tiling表示UV坐标的缩放倍数,Offset表示UV坐标的起始位置. 这样说当然是隔 ...
- unity3d中 刚体(Rigidbody) 碰撞体(Collider) 触发器(Is Trigger)
刚体(Rigidbody)的官方(摘自Unity3d的官方指导书<Unity4.x从入门到精通>)解释如下: Rigidbody(刚体)组件可使游戏对象在物理系统的控制下来运动,刚体可 ...
- Unity3D中Update()与FixedUpdate()的区别
Unity3D中Update()与FixedUpdate()的区别是什么呢?从字面上理解,它们都是在更新时会被调用,并且会循环的调用.但是Update会在每次渲染新的一帧时,被调用.而FixedUpd ...
- Unity3D中C#和js方法相互调用
通过查找资料,Unity3D中C#和js要相互调用彼此的方法,js文件必须放在"Standard Assets". "Pro Standard Assets" ...
- 在unity3d中使用opencv
1.首先下载opencv2.4.10,解压缩后放在合适的地方,然后根据自己的电脑(32位或64位)选择X86或X64,我的是32位,将“opencv存放路径\build\x86\vc12\bin”加入 ...
- Unity3D 中 用quaternion 来对一个坐标点进行旋转的初步体会
在unity3d中,用四元数来表示旋转,四元数英文名叫quaternion . 比如 transform.rotation 就是一个四元数,其由四个部分组成 Quaternion = (xi + yj ...
- 【转】Unity3D中Layers和LayerMask解析
http://blog.csdn.net/yupu56/article/details/50441151 Unity中是用int32来表示32个Layer层.int32表示二进制一共有32位(0-31 ...
随机推荐
- 一个 -100.01 的double 在内存中怎么存储的. 一个中文String 在内存中占多少直接 utf-8 / GBK
一.-100.01 的double 在内存中怎么存储的 double双精度数据类型存储格式IEEE 双精度格式为8字节64位,由三个字段组成:52 位小数 f : 11 位偏置指数 e :以及 1 位 ...
- linux终端常用快捷键
Ctrl + d 删除一个字符,相当于通常的Delete键(命令行若无任何字符,则相当于exit:处理多行标准输入时也表示EOF ) Ctrl + h 退格删除一个字符,相当于 ...
- mui日期插件$, each遍历,EventListener事件监听,json格式
(function($) { $.init(); var result = $('#result')[0]; var btns = $('.btn'); btns.each(function(i, b ...
- java高新技术-操作javaBean
1. 对javaBean的简单内省操作 public class IntroSpectorTest { public static void main(String[] args) throws Ex ...
- <<< request.getParameterMap()方法
request.getParameterMap()方法返回的值,是一个Map类型的,记录着所提交的请求中请求参数和请求参数值的映射关系. 当不知道前台传过来的是什么,且不知道传过来的对象时,可用这个, ...
- 初识Docker和Windows Server容器
概览 伴随着Windows Server 2016 Technical Preview 3 (TP3)版本的发布,微软首次提供了Windows平台下地原生容器.它集成了Docker对Windows S ...
- 探索 OpenStack 之(8):Neutron 深入探索之 OVS + GRE 之 完整网络流程 篇
前两篇博文分别研究了Compute节点和Neutron节点内部的网络架构.本文通过一些典型流程案例来分析具体网络流程过程. 0. 环境 同 学习OpenStack之(7):Neutron 深入学习之 ...
- jQuery验证控件jquery.validate.js使用说明
官网地址:http://bassistance.de/jquery-plugins/jquery-plugin-validation jQuery plugin: Validation 使用说明 转载 ...
- [nosql之redis]yum安装redis
1.首先对于这种nosql来说目前我用到的功能很少,所以感觉没有必要去优化他跟不需要去编译安装.今天来介绍下一个yum安装redis 步骤1:安装扩展yum库 [root@localhost ~]# ...
- Mysql 建立索引