Unity
Unity Android SDK接入说明
SDK文件
下载SDK,alg-unity-android-v1.2.4.zip
alg.aar //包含jar包和清单文件(权限申明)
(cpu-type)/libnative-alg.so //算法C库
对应桥接类名
#if UNITY_ANDROID
private static AndroidJavaClass _helper;
public static AndroidJavaClass helper
{
get
{
if (_helper != null) return _helper;
_helper = new AndroidJavaClass("com.deepbaysz.alg.BLHelper");
return _helper;
}
}
发送数据给Unity,receiver = "BLHelper", method = "onMsg",接收安卓回调的gameobject名字必须为"BLHelper",脚本名也为"BLHelper”.
/**
* 发送数据到Unity
*
* @param fmt 格式化数据
*/
private static void sendToApp(String fmt) {
Log.d(TAG, "sendToApp: " + fmt);
UnityPlayer.UnitySendMessage(receiver, method, fmt);
}
扫描设备实例
JSONObject obj = new JSONObject();
try {
obj.put("type", TYPE.FIND_DEVICE.ordinal());
obj.put("name", device.getName());
obj.put("address", device.getAddress());
obj.put("state", btManager.getConnectionState(device, BluetoothProfile.GATT)); //0=disconnected 1=connecting 2=connected 3=disconnecting
sendToApp(obj.toString());
} catch (JSONException e) {
e.printStackTrace();
}
SDK方法说明
init(String param)
初始化数据和请求蓝牙权限scanDevice
扫描设备scanStop
停止扫描connectDevice(String address)
连接设备disconnectDevice(String address)
断开连接getVersion(String address)
获取设备固件版本getBattery(String address)
获取设备电量
init方法param参数说明
blReceiver: 接收数据的gameObject名称,默认BLHelper
blMethod: 接收数据的方法名称,默认onMsg
accountId: 分配给开发者的鉴权id
token: 分配给开发者的鉴权token
项目依赖
目前项目依赖okhttp,需要在安卓项目中添加依赖项 implementation("com.squareup.okhttp3:okhttp:4.10.0")
Unity接收方法数据方法
enum TYPE {
none = 0,
data = 1,//蓝牙数据
find_device = 2,//扫描设备回调
connect_succeed = 3,//连接成功回调
connect_failed = 4,//连接失败回调
disconnected = 5,//断开连接回调
device = 6 //获取设备信息(电量,固件版本)
};
- 蓝牙数据参数 (signal 0信号质量好,1信号质量异常)
{
"address":"D6:5E:71:12:99:0C",
"type":1, // int 类型
"mindfulness":0, // float 类型
"stress":0,// int 类型
"fatigue":0,// int 类型
"emotion":0,// float 类型
"focus":0,// int 类型
"energy":{
"alpha":0, // float 类型
"beta":0, // float 类型
"theta":0, // float 类型
"delta":0, // float 类型
"gamma":0 // float 类型
},
"signal":1 // int 类型
}
算法指标说明请参考:数据说明
- 扫描设备参数 (state 0未连接, 1连接中, 2已连接)
{
"type":2,
"name":"Dbay-EEG2-283D",
"address":"D2:F7:33:DA:C8:C6",
"state":0
}
- 连接设备参数
{
"type":3,
"address":"DF:EB:68:47:64:30",
"state":2
}
- 连接失败参数
{
"type":4,
"address":"DF:EB:68:47:64:30",
"state":0
}
- 断开设备参数
{
"type":5,
"address":"DF:EB:68:47:64:30",
"state":0
}
- 获取设备信息参数
{
"type":6,
"address":"DF:EB:68:47:64:30",
"battery":10
}
{
"type":6,
"address":"DF:EB:68:47:64:30",
"version":"29-xx"
}
Unity接收扫描设备数据
void onMsg(string json)
{
Debug.Log("---onMsg---" + json);
BLData data = JsonUtility.FromJson<BLData>(json);
if (data.type == (int)TYPE.find_device)
{
if (!blDevice.ContainsKey(data.address))
{
blDeviceList.Add(data);
blDevice.Add(data.address, data);
}
else
blDevice[data.address] = data;
refreshDevice();
#if USE_MESSENGER
Messenger.Broadcast("type_find_device", data);
#endif
}
}
Unity iOS SDK接入说明
SDK文件
下载SDK,alg-unity-ios-v1.2.zip
DBAlgorithm.framework //包含算法SDK的动态库文件
BLHelper.h BLHelper.m //调用桥接SDK文件的类
README.md //SDK接入说明文件
对应桥接类名
发送数据给Unity,receiver = "BLHelper", method = "onMsg",接收iOS回调的gameobject名字必须为"BLHelper",脚本名也为"BLHelper”.
/// 发送所有的通信数据到Unity端
/// @param json 结构化的数据
-(void)sendToApp:(NSString*)json
{
// PS:当使用Unity3d的时候,使用下面的方法发送消息,同时需要打开"UnityInterface.h"文件的引用
UnitySendMessage(getChar(receiver), getChar(method), getChar(json));
}
扫描设备实例
NSDictionary * deviceDict = @{
@"address": peripheral.identifier.UUIDString,
@"name": peripheral.name,
@"state": [NSNumber numberWithInt:(int)peripheral.state],
@"type":[NSNumber numberWithInt:type_connect_succeed],
};
[self sendToApp:[self objectToJson:deviceDict]];
SDK 方法说明
- init(String param); 初始化数据和请求蓝牙权限.
- scanDevice(); 扫描设备.
- scanStop(); 停止扫描.
- connectDevice(String address); 连接设备.
- disconnectDevice(String address); 断开连接.
- getVersion(String address); 获取设备固件版本.
- getBattery(String address); 获取设备电量.
Unity接收方法数据方法
enum TYPE {
none = 0,
data = 1,//蓝牙数据
find_device = 2,//扫描设备回调
connect_succeed = 3,//连接成功回调
connect_failed = 4,//连接失败回调
disconnected = 5,//断开连接回调
device = 6 //获取设备信息(电量,固件版本)
};
蓝牙数据参数 (signal 0信号质量好,1信号质量异常)
{
"address": "D6:5E:71:12:99:0C",
"type": 1, // int 类型
"mindfulness": 0, // float 类型
"stress": 0, // int 类型
"fatigue": 0, // int 类型
"emotion": 0, // float 类型
"focus": 0, // int 类型
"energy": {
"alpha":0, // float 类型
"beta":0, // float 类型
"theta":0, // float 类型
"delta":0, // float 类型
"gamma":0 // float 类型
},
"signal": 1
}扫描设备返回数据 (state 0未连接, 1连接中, 2已连接)
{
"type": 2,
"name": "Dbay-EEG2-283D",
"address": "D2:F7:33:DA:C8:C6",
"state": 0
}连接设备返回数据
{
"type": 3,
"address": "DF:EB:68:47:64:30",
"name": "Dbay-EEG2-283D",
"state": 2
}
- 连接失败返回数据
{
"type": 4,
"address": "DF:EB:68:47:64:30",
"name": "Dbay-EEG2-283D",
"state": 0
}
- 断开设备返回数据
{
"type": 5,
"address": "DF:EB:68:47:64:30",
"name": "Dbay-EEG2-283D",
"state": 0
}
- 获取设备电量返回数据
{
"type": 6,
"address": "DF:EB:68:47:64:30",
"name": "Dbay-EEG2-283D",
"battery": 60
}
- 获取设备版本返回数据
{
"type": 6,
"address": "DF:EB:68:47:64:30",
"name": "Dbay-EEG2-283D",
"version": "0.2.9"
}
Unity接收扫描设备数据
void onMsg(string json)
{
Debug.Log("---onMsg---" + json);
BLData data = JsonUtility.FromJson<BLData>(json);
if (data.type == (int)TYPE.find_device)
{
if (!blDevice.ContainsKey(data.address))
{
blDeviceList.Add(data);
blDevice.Add(data.address, data);
}
else
blDevice[data.address] = data;
refreshDevice();
#if USE_MESSENGER
Messenger.Broadcast("type_find_device", data);
#endif
}
}