目录
Unity本身是一个跨平台的游戏和交互式媒体开发环境,本身并不直接提供串口通信的功能。然而,Unity支持通过C#脚本语言进行扩展,可以使用C#来编写与串口通信相关的代码,通过System.IO.Ports.SerialPort类来实现。
一、准备工作
1.Project Settings
使用SerialPort类需引入System.IO.Ports命名空间,引用这个命名空间必须将Project Settings –> Player –> Other settings –> Configuration –> API Compatibility Level 从 .NET standard 2.1 改成 .NET Framework。
2.创建脚本
创建一个C# Script脚本,绑定到场景中的空物体上。
引入System.IO.Ports命名空间,创建MySerialPort类,封装串口通信的各种功能。
[System.Serializable]注解可将类中的非静态公有字段显示在Unity的Inspector面板中,便于修改和调试。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO.Ports;
[System.Serializable]
public class MySerialPort
{
}
public class GameManager : MonoBehaviour
{
public MySerialPort mySerialPort;
}
二、串口初始化
创建SerialPort类的对象sp。
这里对SerialPort中的一些常用属性进行说明:
PortName:串口名称,一般为COM+数字
BaudRate:波特率
Parity:校验位
DataBits:数据位长度
StopBits:停止位
ReadTimeout:读超时,若读串口时超过一定毫秒未读到,将会报错。-1表示无超时。
WriteTimeout:写超时,同上。
[System.Serializable]
public class MySerialPort
{
private SerialPort sp;
[SerializeField] private string defaultPortName = "COM0";
[SerializeField] private int baudRate = 115200;
[SerializeField] private Parity parity = Parity.None;
[SerializeField] private int dataBits = 8;
[SerializeField] private StopBits stopBits = StopBits.One;
[SerializeField] private int readTimeout = 1000;
[SerializeField] private int writeTimeout = 500;
public void PortInit()
{
sp = new()
{
PortName = defaultPortName,
BaudRate = baudRate,
Parity = parity,
DataBits = dataBits,
StopBits = stopB