1.话不多说上效果,目前开发的是Android版本的蓝牙和带蓝牙电子设备连接,下图展示的蓝牙控制机器小车运动,由于上传完整视频会比较麻烦,所以选择截屏展示,望大家见谅。
2.首先导入一个插件,插件官方地址 https://assetstore.unity.com/packages/tools/input-management/arduino-bluetooth-plugin-98960
支持平台
2.从插件的名字可以看出支持Arduino,我们这篇主要讲解蓝牙功能,所以Ardunio在这边不介绍,有机会在做解析。插件导入成功后我们可以看到目录下 Assets/BluetoothAPI/Arduino Unity Plugin.pdf的文档,我们开始讲解。
界面展示
using ArduinoBluetoothAPI;
using System;
using UnityEngine;
using UnityEngine.UI;
/*********
作者:Hankex
邮箱:[email protected]
功能:蓝牙模块的核心交互模块
*********/
namespace Buletooth
{
public class UIController : MonoBehaviour
{
BluetoothHelper _m_helper;
public InputField m_deviceName_ipt; // 输入设备名称
public Button m_connect_btn; // 连接蓝牙按钮
public Button m_disconnect_btn; // 断开蓝牙连接按钮
public Button m_clearLog_btn; // 清除日子面板信息按钮
public Button m_hideLog_btn; // 隐藏当前面板按钮,一般连接成功就关闭这些面板,进入控制
public Text m_log_txt; // 输入的日志信息
// 消息处理的回调
Action _m_msgHandler;
public void AddMsgHandler(Action handler)
{
_m_msgHandler = handler;
}
void Awake()
{
// 添加连接按钮的事件
m_connect_btn.onClick.AddListener(() =>
{
if (!string.IsNullOrEmpty(m_deviceName_ipt.text))
{
Log("开始连接蓝牙:" + m_deviceName_ipt.text);
// 设置连接的设备名字
_m_helper.setDeviceName(m_deviceName_ipt.text);
// 开始连接
_m_helper.Connect();
}
});
// 添加断开连接按钮的事件
m_disconnect_btn.onClick.AddListener(Disconnect);
// 添加日志清除按钮的事件
m_clearLog_btn.onClick.AddListener(() =>
{
m_log_txt.text = "日志";
});
// 隐藏面板操作事件监听
m_hideLog_btn.onClick.AddListener(() =>
{
gameObject.SetActive(false);
});
try
{
// 获取 BluetoothHelper 实例
_m_helper = BluetoothHelper.GetInstance();
// 打开蓝牙
_m_helper.EnableBluetooth(true);
// 设置收发字符的长度,这里是重点,不设置则接,发 不了消息,要到数据缓存的一定的量才一次性发送
_m_helper.setFixedLengthBasedStream(1);
// 连接成功的回调函数
_m_helper.OnConnected += () =>
{
Log("连接成功");
// 连接成功,开始监听消息
_m_helper.StartListening();
};
// 连接失败的回调函数
_m_helper.OnConnectionFailed += () =>
{
Log("连接失败");
Disconnect();
};
// 没有找到设备的回调函数
_m_helper.OnServiceNotFound += serviceName =>
{
Log("没有找到设备:" + serviceName);
// 断开连接
Disconnect();
};
// 接收到消息的回调函数
_m_helper.OnDataReceived += () =>
{
Log("接收到一条新消息");
// 处理接收到的回调
_m_msgHandler(_m_helper.Read());
};
}
catch (Exception e)
{
Log("连接异常:" + e.Message);
Disconnect();
}
}
///
/// 输出日志
///
/// 日志内容
public void Log(string log)
{
m_log_txt.text += "\n" + log;
}
///
/// 发送消息
///
/// 消息的内容
public void Send(string msg)
{
_m_helper.SendData(msg);
}
void OnDestroy()
{
Disconnect();
}
///
/// 断开连接
///
void Disconnect()
{
Log("断开连接");
if (_m_helper != null)
_m_helper.Disconnect();
}
}
}
以上是核心交互模块,基本的蓝牙功能已经在里面了,上面是已经配对好蓝牙才能连接。一定要设置 BluetoothHelper.setFixedLengthBasedStream(int length) 不然接发的消息会被缓存下来,到达指定的长度然后发送,本人在这边踩坑踩了很久。
如果想拓展功能 BluetoothHelper 还有以下方法:
源码链接就不给你们了,给你们也用不了,面对的终端不一样,上面的已经够用了。
下面分享的是插件链接,推荐AssetStore下载(大家懂的),下面提供插件的下载