Unity实现Android源生平台蓝牙BLE4.0数据传输一
Unity实现Android源生平台蓝牙BLE4.0数据传输(一)
Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。虽然是游戏引擎,不过现在目前还有很多用来做AR、VR、MR等内容.这样就少不了要与智能硬件配合交互,智能硬件由于便利性都大多数采用无线连接,无线连接主流一般是WIFI、Bluetooth蓝牙等方式.其中蓝牙BLE4.0以更省电、成本低、3毫秒低延迟、超长有效连接距离、AES-128加密等优势,取得大家的青睐,今天就来说说用Unity实现BLE4.0的数据传输.
Unity想要使用Android源生控件或者功能首先我们要来了 AndroidJavaClass、AndroidJavaObject、AndroidJavaProxy 三个类.
其中 AndroidJavaClass 一般调用静态函数跟获取静态字段使用这个,如果做过unity 跟android交互的朋友们应该见过这句
unityActivity = new AndroidJavaClass("com.unity3d.player.UnityPlayer").GetStatic<AndroidJavaObject>("currentActivity");
这里先new了一个 AndroidJavaClass对象然后调用 GetStatic获取静态字段 currentActivity
AndroidJavaObject 一般是Java实例对象用来调用Java的实例函数跟获取实例字段.
比如 我要建立一个Java的String对象
AndroidJavaObject javaString = new AndroidJavaObject("java.lang.String", text);
我再获取这个String对象的字符长度
var sLenth = javaString.Call<int>("length");
AndroidJavaProxy
是用来实现Java的接口 interface. 这里引用Unity官方文档样例
private static DateTime selectedDate = DateTime.Now;
public class DateCallback : AndroidJavaProxy
{
public DateCallback() :base("android.app.DatePickerDialog$OnDateSetListener") { }
void onDateSet(AndroidJavaObject view, int year, int monthOfYear, int dayOfMonth)
{
selectedDate = new DateTime(year, monthOfYear + 1, dayOfMonth);
}
}
实现接口以后Android 调用接口函数的时候会调用Unity端的接口实现.但函数名应该保持与Java接口函数一致.
其实能使用 AndroidJavaClass 、
AndroidJavaObject 类已经能使用Android 大部分功能.
下篇我们来写具体的BLE4.0蓝牙数据传输实现.
有问题的朋友可以关注我的微信订阅号给我留言