Skip to main content
版本:1.2.4

Unity

Unity Android SDK接入説明

SDK文件

下載SDK,alg-unity-android-v1.0.zip

1、alg.aar //包含jar包和清單文件(權限申明)
2、(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"

    /**
* 發送數據到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方法説明

  1. init(String param) 初始化數據和請求藍牙權限
  2. scanDevice 掃描設備
  3. scanStop 停止掃描
  4. connectDevice(String address) 連接設備
  5. disconnectDevice(String address) 斷開連接
  6. getVersion(String address) 獲取設備固件版本
  7. getBattery(String address) 獲取設備電量

Unity接收方法數據方法

    enum TYPE {
none = 0,
data = 1,//藍牙數據
find_device = 2,//掃描設備回調
connect_succeed = 3,//連接成功回調
connect_failed = 4,//連接失敗回調
disconnected = 5,//斷開連接回調
device = 6 //獲取設備信息(電量,固件版本)
};


  1. 藍牙數據參數 (signal 0信號質量好,1信號質量異常)
{
"address":"D6:5E:71:12:99:0C",
"type":1,
"mindfulness":0,
"stress":0,
"fatigue":0,
"emotion":0,
"focus":0,
"energy":{
"alpha":0,
"beta":0,
"theta":0,
"delta":0,
"gamma":0
},
"signal":1
}

算法指標説明請參考:數據説明

  1. 掃描設備參數 (state 0未連接, 1連接中, 2已連接)
{
"type":2,
"name":"Dbay-EEG2-283D",
"address":"D2:F7:33:DA:C8:C6",
"state":0
}
  1. 連接設備參數
{
"type":3,
"address":"DF:EB:68:47:64:30",
"state":2
}
  1. 連接失敗參數
{
"type":4,
"address":"DF:EB:68:47:64:30",
"state":0
}
  1. 斷開設備參數
{
"type":5,
"address":"DF:EB:68:47:64:30",
"state":0
}
  1. 獲取設備信息參數
{
"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.0.zip

DBAlgorithm.framework //包含算法SDK的動態庫文件
BLHelper.h BLHelper.m //調用橋接SDK文件的類
README.md //SDK接入説明文件

對應橋接類名

發送數據給Unity,receiver = "BLHelper", method = "onMsg"

/// 發送所有的通信數據到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 方法説明

  1. init(String param); 初始化數據和請求藍牙權限.
  2. scanDevice(); 掃描設備.
  3. scanStop(); 停止掃描.
  4. connectDevice(String address); 連接設備.
  5. disconnectDevice(String address); 斷開連接.
  6. getVersion(String address); 獲取設備固件版本.
  7. getBattery(String address); 獲取設備電量.

Unity接收方法數據方法

enum TYPE {
none = 0,
data = 1,//藍牙數據
find_device = 2,//掃描設備回調
connect_succeed = 3,//連接成功回調
connect_failed = 4,//連接失敗回調
disconnected = 5,//斷開連接回調
device = 6 //獲取設備信息(電量,固件版本)
};
  1. 藍牙數據參數 (signal 0信號質量好,1信號質量異常)
{
"address": "D6:5E:71:12:99:0C",
"type": 1,
"mindfulness": 0,
"stress": 0,
"fatigue": 0,
"emotion": 0,
"focus": 0,
"energy": {
"alpha": 0,
"beta": 0,
"theta": 0,
"delta": 0,
"gamma": 0
},
"signal": 1
}
  1. 掃描設備返回數據 (state 0未連接, 1連接中, 2已連接)
{
"type": 2,
"name": "Dbay-EEG2-283D",
"address": "D2:F7:33:DA:C8:C6",
"state": 0
}
  1. 連接設備返回數據
{
"type": 3,
"address": "DF:EB:68:47:64:30",
"name": "Dbay-EEG2-283D",
"state": 2
}
  1. 連接失敗返回數據
{
"type": ,
"address": "DF:EB:68:47:64:30",
"name": "Dbay-EEG2-283D",
"state": 0
}
  1. 斷開設備返回數據
{
"type": 5,
"address": "DF:EB:68:47:64:30",
"name": "Dbay-EEG2-283D",
"state": 0
}
  1. 獲取設備電量返回數據
{
"type": 6,
"address": "DF:EB:68:47:64:30",
"name": "Dbay-EEG2-283D",
"battery": 60
}
  1. 獲取設備版本返回數據
{
"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
}
}