开发接口
VOID AR SDK提供接口有三种方式。
方式一:直接调用API方法。例如:
VoidAR.GetInstance().startMarkerlessTracking();
|
方式二:重写基类方法或者实现接口(interface)。例如:
protected override IMarker SetCloudVideoComponent(GameObject markerTarget, GameObject videoPlayTarget, string markerName, string videoPath){ ... }
|
方式三:VoidAREvent事件机制。例如:
AddEventListener(VoidAREvent.FIND, OnFind);
|
VoidAREvent属性如下:
name:事件名称;
currentTarget:事件目标,可以获取事件派发目标对象。
data:事件数据,比如云资源加载时,data为进度数据。
下面为VoidAR SDK的主要功能点提供的开发接口:
1、本地识别
- 识别和丢失接口:
ImageTarget对象上脚本组件ImageTargetBehaviour提供事件派发机制。
void Awake() { //侦听识别事件 AddEventListener(VoidAREvent.FIND, OnFind); AddEventListener(VoidAREvent.LOST, OnLost); } //Find事件处理 void OnFind(VoidAREvent evt){ Debug.Log("OnFind"); } //Lost事件处理 void OnLost(VoidAREvent evt){ Debug.Log("OnLost"); }
|
目标识别成功时派发FIND事件,目标丢失时派发LOST事件。
2、云识别
云识别需要在ARCamera上添加CloudController脚本组件,CloudController提供了云识别状态,云资源下载,云识别自定义数据处理等接口。
- 云识别数据成功响应:指云服务器已经成功识别了目标,返回识别结果。
/// <summary> /// 云识别数据成功响应 /// </summary> /// <param name="url">资源URL</param> /// <param name="name">资源名称</param> /// <param name="metadata">扩展数据</param> protected override void OnSuccess(string url, string name, string metadata) { //默认AB模型资源Assetsbundle通过WWW加载,云视频创建视频播放器, //可以通过自定义数据实现云识别目标自定义创建(创建完成后,通过VoidAR.GetInstance().addCloudTarget()接口加入到SDK识别) base.OnSuccess(url, name, metadata); Debug.Log("OnSuccess metadata:" + metadata); }
|
云平台添加的自定义数据通过此方法获取。
- 设置云视频组件:云视频播放时,可以扩展播放器,处理播放事件
/// <summary> /// 设置云视频组件 /// 可以设置扩展后的ImageTargetBehaviour和VideoPlayBehaviour(使用Unity5.6原生播放器) /// </summary> /// <param name="markerTarget">marker目标对象</param> /// <param name="videoPlayTarget">视频播放器对象</param> /// <param name="markerName">marker图片</param> /// <param name="videoPath">云视频路径</param> /// <returns>IMarker接口对象</returns> protected override IMarker SetCloudVideoComponent(GameObject markerTarget, GameObject videoPlayTarget, string markerName, string videoPath) { var itb = markerTarget.AddComponent<ImageTargetBase>(); itb.AddEventListener(VoidAREvent.FIND, OnFind); itb.AddEventListener(VoidAREvent.LOST, OnFind); itb.SetPath(markerName); var vpb = videoPlayTarget.AddComponent<VideoPlayBehaviour>(); vpb.path = videoPath; return itb; }
|
- 消息类事件:
//云识别目标本地创建完成(开始跟踪) AddEventListener(VoidAREvent.COMPLETE, OnComplete); //AB资源下载进度 AddEventListener(VoidAREvent.PROGRESS, OnDownload); //异常通知 AddEventListener(VoidAREvent.ERROR, OnError);
|
3、VOID SLAM
- 启动和停止接口:需要在跟踪目标GameObject上添加ITricking接口组件,SDK默认实现类为MarkerlessTracking。ITricking接口用于获取SLAM状态,包括异常情况。
public interface ITricking { bool GetActive(); int GetTrackingState(); //跟踪活动状态 void SetActive(bool value); //跟踪反馈(可以根据stateCode的值判断异常状态,具体参见MarkerlessTracking代码) void UpdateTracking(int stateCode); }
|
SLAM异常状态代码目前有:
1099:网络错误;
501:开发者帐号异常,帐号没有填写或者帐号数据不正确;
101:帐号使用次数超过限制
SLAM使用接口:
//启用跟踪 VoidAR.GetInstance().startMarkerlessTracking(); //停止跟踪 VoidAR.GetInstance().resetMarkerless();
|
4、其它
- 录屏接口:运行中录制AR场景为MP4格式的视频,保存到相册,需要在ARCamera上添加VideoRecordBehaviour脚本组件。
VideoRecordBehaviour脚本组件提供了开启停止录屏功能,并内置了简单GUI。
Enable GUI:是否开启内置GUI,如果禁用,需要调用录屏方法才能使用:
//第一次调用开启录屏,再次调用停止录屏 public void REC(){ ... }
|
Android录屏后的视频文件路径为扩展卡DCIM文件夹内,iOS录屏后的视频文件路径为相册。
- 视频播放接口:VoidVideoPlayer脚本组件实现视频播放。
在视频播放过程中,以下接口可以获取视频播放状态:
//视频资源准备完毕 AddEventListener(VoidAREvent.READY, OnReady); //播放结束 AddEventListener(VoidAREvent.END, OnEnd);
|
VideoPlayBehaviour脚本实现AR视频控制,需要和ImageTargetBehaviour结合使用,当ImageTargetBehaviour派发FIND和LOST事件时,自动调用VideoPlayBehaviour的响应方法。
FIND事件:自动执行VideoPlay(),视频开始播放,如果每次识别后都重新开始播放,调用VideoPlay(0);
LOST事件:自动执行VideoPause(),暂停视频播放。