
版本:v1.0.10
Xvisio XR Foundation Uniy SDK是诠视科技为国产化MR眼镜在Unity引擎中的开发工具包。这一工具包不仅充分利用了Unity引擎的强大功能,还结合了诠视科技在AR领域的深厚技术积累,为开发者带来了前所未有的开发体验和无限可能。
SDK工具包通过两种方式提供,分别是Unity工程和Unity Package包的形式。 Unity Package更适用于SDK升级更新,首次使用建议选择在SDK工程基础上开发。
SDK工程链接: https://www.xvisiotech.com/xvisio/DeveloperDocumentation/files/xvxr-plugin-unity-main_20260525.1.rar
SDK Unity Package链接:https://www.xvisiotech.com/xvisio/DeveloperDocumentation/files/xvxr-plugin-unity-main_20260525.1.unitypackage
请前往Unity官网下载对应的开发版(Unity2022.3.62)。下载地址: https://unity.cn/releases

在安装Unity之前,需要先安装UnityHub。点击 https://unity.cn/releases进入Unity官网,点击“下载Unity”按钮,进入Unity下载页面以后点击” 下载UnityHub”按钮进行下载, 下载结束后安装UnityHub。

Unity Hub安装完成以后可以选择对应的Unity版本进行安装,推荐使用Unity2022.3.62版本进行开发。 下载的时候点击“从Unity Hub下载”。

在UnityHub中进行Unity安装的时候,需要勾选对应的Android支持模块。

a)下载链接: https://www.xvisiotech.com/xvisio/DeveloperDocumentation/files/Unity2022_AndroidSDK.rar
b)解压Unity2022_AndroidSDK文件,找到Unity2022.3.62版本对应SDK目录,将解压的SDK文件覆盖Unity Android SDK文件,如下图所示。

如果你使用SDK项目工程进行开发,则不需要导入相关MRTK设置,直接使用Unity2022.3.62版本运行工程即可。



选择Unity2022.3.62版本,切换到Android平台。

打开Editor/Preferences/External Tools。如下图所示,需要全部勾选使用默认配置。

打开File/BuildSettings/PlayerSettings/Player/Publishing Setting。确保Build设置如下图所示。

示例场景提供快捷打包的方法。通过菜单XvXR/Toolkit/Build Scenes选择对应示例场景进行打包,打包成功以后apk保存到工程下面的apk文件夹里面。

如果你选择Unity Package从头开始构建新项目,你需要按照下面的步骤进行相关配置。
a) 创建新项目
打开Unity Hub,点击“新项目”创建项目

b) 项目设置
选择Unity2022.3.62版本,设置项目名称、项目保存位置。点击“创建项目”开始构建新项目。

新项目创建打开以后,需要将项目切换到Android平台。

a) 双击打开"MixedRealityFeatureTool"工具
下载链接: https://www.xvisiotech.com/xvisio/DeveloperDocumentation/files/MixedRealityFeatureTool.rar


b) 选择Unity项目
选择前面新建的项目导入MRTK配置。







c) 导入MRTK
完成上述操作以后回到Unity工程,开始自动导入MRTK相关依赖。
将Xvisio XR Foundation Uniy SDK导入Unity。
a) 打开文件夹
右键单击Assets,选择Custom Package打开SDK工具包所在文件夹。

b) 选择SDK开发工具包

c) 选择“Import”

SDK导入完成以后我们需要设置对应的开发环境。
a) 打开设置窗口
点击XvXR/Toolkit/Project Settings打开快捷设置窗口。

b) Publishing Setting设置
打开File/BuildSettings/PlayerSettings/Player/Publishing Setting。确保Build设置如下图所示。

c) Android工具设置
打开Editor/Preferences/External Tools。如下图所示,需要全部勾选使用默认配置。

通过快捷打包方式,可以快速打包示例场景,打包好的apk存储目录和工程Asset文件夹同级目录下的APK文件夹内。
选择XVXR/Toolkit/Build Scenes/MRTK2开始打包, 也可以选择其他场景进行打包测试。打包出来的APK在当前工程目录下:


安装apk有两种方式,通过ADB工具安装和直接拷贝到“计算单元”安装。
a) 下载ADB工具
下载链接: https://download.xvisiotech.com/unitydevtool/ADB.rar
b) ADB常用命令
查看设备IP adb shell ifconfig
获取当前连接设备列表 adb devices
通过IP地址连接设备 adb connect 192.168.xx.xx
通过IP地址断开设备 adb disconnect 192.168.xx.xx
安装apk adb install xxxx.apk
清空log adb logcat -c
保存log到指定目录 adb logcat > D:\log.log
停止抓log 按下Ctrl + C
Logcat过滤关键词 adb logcat | find "关键词"
将SeerPad计算单元通过TypeC线连接到PC上,打开内部存储器根目录,创建APK文件夹,将apk拷贝进去。拷贝进去以后拔下TypeC连接线,眼镜接上SeerPad.点击眼镜菜单界面右下角apk图标打开安装列表。选择对应apk进行安装。




在Unity中可以模拟手势相关的操作,下面是一些常用操作说明。
按住键盘Space(空格键)按键出现虚拟右手
按住键盘Shift(空格键)按键出现虚拟左手
按住键盘W、A、S、D按键可以前后左右移动视野
按住键盘Q、E按键可以上下移动观察视野
按住鼠标右键旋转观察视野
滚动鼠标滚轮可以前后移动虚拟手
当虚拟手或者射线选中交互物体以后,可按住鼠标左键选择拖动。如果是UI元素,也是通过按下鼠标左键进行选择。

SDK提供完整的构建能力,您可以参考示例场景进行项目构建,同时为了开发方便,也提供快捷方式添加这些功能,如下图所示,我们可以直接通过快捷方式添加一些核心功能。

为了让Unity场景能够在我们眼镜里面运行起来,我们需要构建和我们眼镜相关的基础场景。


眼球追踪功能可以提供眼球的注视点方向、眼球坐标、瞳距等数据。




要能够使用头瞄点和UGUI交互,你可以参考下面操作步骤添加必要功能。




使用虚拟键盘,可以在特定输入框中输入汉字、数字、字符,可参考下面步骤将虚拟键盘用于你的项目中。




sdk提供混合现实的本地录制和截图,按照下面的操作可以将该功能添加到你的项目中。






截图所在目录:/storage/emulated/0/DCIM/Screenshots
视频所在目录:/storage/emulated/0/DCIM/ScreenRecorder
通过混合现实捕捉,你可以很轻松的获取到虚实结合以后的图像,并将该功能用于你实际的项目开发中。





通过眼镜的tof功能,可以识别真是环境中的平面。




可以通过rgbd功能获取到rgb图像像素坐标在空间中坐标。

添加XvCameraManager,主要用于开启tof深度相机

添加XvRgbdManager,通过该脚本可以获取rgb像素坐标到三维空间的变换



通过RTSP推流,可以将眼镜第一人称视角虚实结合视频流推送出去,可以使用第三方拉流软件进行视频流播放。





Launcher界面操作小提示:默认采用头瞄(光标跟随用户头部移动)选择并确认(单击计算单元上的圆形确认按钮)

1)打开Wifi列表
2)选择Wifi
3)点击Wifi密码输入框
4)在虚拟键盘上点击输入密码
5)点击“连接Wifi”按钮
6)等提示出现“连接成功”后表示Wifi连接成功,再点击“返回”退出设置界面。
回到Launcher界面,此时左下角显示IP地址


下载地址:https://www.xvisiotech.com/xvisio/DeveloperDocumentation/files/vlc-3.0.18-win3_xv.zip


地址:rtsp://{ip}:8554/stream/0
示例: rtsp://192.168.31.159:8554/stream/0只需要替换ip部分即可
特别提示: 需要先保证眼镜联网,IP地址是眼镜的IP地址。

通过空间建图的功能,可以用于地图共享实现多人协同等操作。




调用眼镜的tof功能,快速扫描空间环境并创建网格覆盖。




使用语音词的识别功能,可以快速配置你所需要的识别命令词。





如何进行系统相关设置,亮度、瞳距等。




使用Apriltag和QRCode识别定位功能,能够快速将你的模型和空间中识别码对齐。
Apriltag识别码下载链接: https://www.xvisiotech.com/xvisio/DeveloperDocumentation/files/apriltag36h11x16cm.zip
QRCode:自己生成就可以

设置相关参数,特别注意apriltag支持CameraType的FishEye和Rgb识别,QRCode目前只支持RGB识别。 size大小为二维码物理尺寸大小,单位为m。RecognizerMode:RGB_QRCode(使用RGB相机识别QRCode) RGB_Apriltag(使用RGB识别Apriltag) FishEye_Apriltag(使用FishEye识别Apriltag)。Confidence:识别置信度,0-1的数值。

注意设置物体id,Apriltag识别码ID参考下图识别码名称后面的数字,QRCode 使用二维码内容作为唯一id.


静态手势包含如下手势:





如何调用相关相机,rgb、tof、fisheye相机等。





如何使用手柄进行交互。





可参考下面的方法。
计算单元提供四个方向键和一个确认键,要监听这些按键的状态,每个按键对应三种状态分别是GetKeyDown,GetKey,GetKeyUp。参考下面按下状态调用方法。
bool OK = Input.GetKeyDown(KeyCode.Return);确认键
bool LeftArrow = Input.GetKeyDown(KeyCode.LeftArrow);左键
bool RightArrow = Input.GetKeyDown(KeyCode.RightArrow);右键
bool UpArrow = Input.GetKeyDown(KeyCode.UpArrow);上键
bool DownArrow = Input.GetKeyDown(KeyCode.DownArrow);下键
有的应用需要使用到系统权限,比如wifi连接功能等。那就需要添加系统签名才能正常使用该功能,系统签名文件可联系商务获取,拥有系统签名可以参考下面方法使用。


密码:android

需要在LauncherManifest文件里面添加android:sharedUserId ="android.uid.system"才能使用,如果不需要系统签名,可以去掉。

根据IR像素坐标获取空间中对的世界坐标。可参考示例场景IRToWorld。

示例场景包含SDK常用功能的演示,你可以参考示例场景测试sdk功能或者构建你的应用。基础示例场景所在目录如下图所示:

EyeTracking主要提供眼控相关的功能使用案例,包括眼动校准和眼动数据的使用,包含多个场景,“EyeCalibration”眼动校准,“EyeTracking”眼动追踪,“EyeImage”获取眼球追踪图像。

提供头瞄点对UGUI交互功能,特别注意,该功能只能和UGUI交互。

该示例场景包含手柄的使用方式,包括手柄连接、配对、扫描等功能

虚拟键盘,需要创建特定输入框接收虚拟键盘输入 。

本地视频录制、截图功能。

提供标准MRTK的常规交互功能。

提供MR混合现实视频的捕捉方法。

该场景提供平面和垂面检测使用方法。

该场景提供通过RGB坐标获取对应三维空间坐标的示例方法。

该场景演示如何将眼镜第一人称视角的MR混合视频通过RTSP推流。可使用第三方RTSP拉流软件进行播放,比如vlc视频播放器。

该示例场景演示多场景切换功能,通过该场景可以测试包含sdk所有的功能。

该场景演示了空间地图的使用使用方法,包括创建地图、保存地图、加载地图功能。

该场景展示了我们空间扫描和网格构建能力,可以扫描空间环境,创建和环境匹配的网格。

该场景主要演示静态手势的使用方法。

该示例场景演示语音命令的识别功能。

该场景演示了系统相关的设置,包括亮度、瞳距设置等。

该示例场景演示如何使用Apriltag和QRCode进行空间定位。

该示例场景演示如何使用相机、包括tof深度相机、双目鱼眼相机、AR眼镜RGB相机。计算单元后置相机。

该示例场景演示如何在应用中使用蓝牙连接配对功能。

该示例场景演示如何通过tof相机获取空间点云数据。

该示例场景演示如何在应用中连接wifi。

根据IR像素坐标获取空间中对的世界坐标。可参考示例场景IRToWorld。

(1)描述
提供眼控功能校准和获取眼动姿态的相关接口,通过该接口,你可以很方便的将眼动应用到你的工程里面去。
(2)接口
a) public void StartGaze()
注解:启用眼控功能
b) public void StopGaze()
注解:停止眼控功能
c) public void GazeCalibrationEnter()
注解:进入眼控校准
d) public int GazeCalibrationCollect(Vector3 point, int index)
注解:设置点位校准数据,需要采集五个点位数据,中心点坐标和四个方位角坐标,中心点第一个坐标,左下角第二个坐标,右下角第三个坐标,右上角第四个坐标,左上角第五个坐标。
参数:
0:设置成功
1:设置失败
返回值:
0:设置成功
1:设置失败
e) public bool UnsetGazeCallback() 重置眼控校准数据
返回值:
0:设置成功
1:设置失败
f) public int CalibrationFinish() 结束眼控校准
返回值:
0:设置成功
1:设置失败
(1)描述
描述:该类提供MR混合现实视频流的本地录制和本地截图功能,该类依赖于XvMRVideoCaptureManager类。
(2)接口
a) public void StartCapture():
注解:启用混合现实捕捉
b) public void StopCapture(bool closeCamera=false)
注解:停止混合现实捕捉
参数:
closeCamera:true:关闭相机 false:不关闭相机
c) public void StartRecording()
注解:开始录制视频
d) public void StopRecording(UnityAction callback)
注解:停止视频录制
参数:
Callback:视频保存后的回调,返回视频保存地址
e) public void SaveScreenshot(UnityAction callback)
注解:保存截图
参数:
Callback:截图保存回调,返回截图保存地址
(1)描述
XvMediaRecorder是基于XvMediaRecorderManager 实现的手部菜单录制功能。
(2)接口
a) public void StartRecording()
注解:开始录制视频
b) public void StopRecording()
注解:停止录制视频
c) public void SaveScreenshot()
注解:保存截图
(1)描述
该类依赖于XvCameraManager类,主要实现混合现实视频流的捕捉。
(2)变量
a) Public RenderTexture CameraRenderTexture
注解:获取当前视频流纹理
b) public Camera BgCamera
注解:虚拟相机
(3)接口
a) public void StartCapture()
注解:开启捕捉虚实结 合视频流
b) public void StopCapture(bool closeCamera = false)
注解: 停止捕捉虚实结合视频流
参数:
closeCamera: true:关闭相机 false:不关闭相机
(1)描述
该类提供空间平面和垂面检测接口。
(2)变量
a) public event Action planesChanged
注解;提供数据
(3)接口
a) public void StartPlaneDetction()
注解:开启平面检测功能
b) public void StopPlaneDetction()
注解:关闭平面检测功能
(1)描述
提供眼控功能校准和获取眼动姿态的相关接口,通过该接口,你可以很方便的将眼动应用到你的工程里面去。
(2)变量
a) private Material planeMat
注解:用于设置平面的材质
(1)描述
该类主要实现rgbd功能,通过该类可以启用或者关闭rgbd功能,可以根据rgb像素坐标获取到三维空间坐标。
(2)接口
a) public void StartRgbPose()
注解:开启RGBD功能
b) public void StopRgbPose()
注解:关闭RGBD功能
c) public bool GetRgbPixel3DPose(Vector2 rgbPoint,ref Vector3 spacePoint)
注解:通过rgb像素坐标获取控件三维坐标
参数:
rgbPoint :rgb 像素坐标:
spacePoint:空间三维坐标
返回值:
spacePoint:空间三维坐标
d) Public bool GetRgbPixelPoseList(Vector2[] rgbPoint,ref pointer_3dpose[] spacePose)
注解:根据rgb像素坐标数组,获取三维空间中坐标数组
(1)描述
该类主要实现将第一人称视角的混合现实画面通过RTSP进行推流,可以使用rtsp拉流软件进行查看。
rtsp地址:rtsp://{ip}:8554/stream/
示例:rtsp://192.168.32.98:8554/stream/
(2)接口
a) public void StartRtspStreaming()
注解:开始推流
b) public void StopRtspStreaming()
注解:停止推流
(1)描述
该类主要实现Cslam功能,可以对空间地图进行扫描生成地图文件,可以通过地图文件实现多人协同功能等。
(2)变量
a) public static UnityEvent onMapSaveCompleteEvent=new UnityEvent()
注解;地图保存成功后的回调
参数:
参数1:map 保存状态
参数2:地图质量
b) public static UnityEvent onMapLoadCompleteEvent=new UnityEvent();
注解:地图加载完成回调
参数:地图质量
c) public static UnityEvent onMapMatchingEvent = new UnityEvent()
注解;地图匹配度回调
参数:地图匹配质量
(3)接口
a) public void StartSlamMap()
注解:开启地图扫描
b) public string SaveSlamMap()
注解:保存扫描地图
返回值:地图保存路径
c) public void LoadSlamMap(string mapPath)
注解:加载地图
参数:已保存的地图路径
d) public void StopSlamMap()
注解:关闭地图扫描功能
e) public ListGetFeaturePoint()
注解:获取地图特征点
返回值:特征点空间坐标
(1)描述
该类主要进行空间网格扫描。
(2)变量
a) public static event Action meshChanged
注解:扫描到空间网格回调
(3)接口
a) public void StartMeshDetection()
注解:开启空间网格扫描功能
b) public void StopMeshDetection()
注解:关闭空间网格扫描功能
(1)描述
该类主要实现空间网格可视化功能。
(2)变量
a) private Material meshMat
注解;设置空间网格可视化材质属性
(1)描述
XvSpeechVoiceManager主要提供语音识别接口相关功能和配置。
(2)变量
a) public UnityAction onCommandRecognized
注解: 语音命令词识别到回调
b) private List aitalkWords = new List()
注解:语音命令词配置和识别成功回调
(1)描述
提供眼控功能校准和获取眼动姿态的相关接口,通过该接口,你可以很方便的将眼动应用到你的工程里面去。
(2)接口
a) public int GetBrightnessLevel()
注解:获取当前眼镜亮度
返回值:0-9
b) public void SetBrightnessLevel(int level)
注解:设置当前眼镜亮度
参数:亮度等级0-9
c) public void SetIPD(float ipd)
注解:设置当前瞳距
参数:瞳距数值,单位是毫米(55mm – 75mm)
d) public float GetIPD()
注解:获取当前瞳距
返回值:当前瞳距,单位为毫米
(1)描述
XvTagRecognizerManager主要提供Apriltagh和QRCode的识别。
(2)变量
a) public CameraType CameraType
注解:设置当前识别的相机参数为枚举类型:可选择Rgb或者FishEye
b) public string TagGroupName
注解:设置当前识别库名称,分别
apritag="36h11" qrcode="qrcode"
c) public double Size
注解:识别图像物理尺寸,单位为米
d) public float Confidence
注解:识别置信度阈值
e) public bool IsDetect
注解:识别开关
f) public UnityEvent OnDetectedAprilTagEvent
注解:识别成功回调
(3)接口
a) public void SetDetectStatus(bool isDetect)
注解:识别检测状态切换
输入:
True:开启检测
False:g关闭检测
(1)描述
该类提供识别成功以后回调方法。
(2)变量
a) public TagDetection TagDetection
注解:识别到的数据结构
b) public UnityEvent OnFoundEvent
注解:识别成功回调
c) public UnityEvent OnLostEvent
注解:识别丢失回调
d) public int id
注解:当前识别码id
(1)描述
可以通过该类获取相机的图像数据以及相机的开关功能。
(2)变量
a) public XvARCameraParameter XvARCameraParameter
注解:设置AR眼镜上rgb相机参数
b) public XvWebCameraParameter XvWebCameraParameter
注解:设置计算单元上的rgb相机参数
c) public static UnityEvent
注解:AR相机数据回调
d) public static UnityEvent
注解:左鱼眼相机数据回调
e) public static UnityEvent
注解:右鱼眼相机数据回调
f) public static UnityEvent
注解:tof相机数据回调
g) public static UnityEvent
注解:处理器计算单元后置摄像头
h) public XvTofCameraParameter XvTofCameraParameter
注解:设置tof相机参数
i) public static UnityEvent onTofIRCameraStreamFrameArrived
注解:tof 相机ir图像数据回调
(3)接口
a) public void StartCapture(XvCameraType cameraType)
注解:打开相机
b) public void StopCapture(XvCameraType cameraType)
注解:关闭相机
c) public bool IsOn(XvCameraType cameraType)
注解:相机是否已经开启
(1)描述
该类主要提供静态手势的获取以及手势状态监听
(2)接口
a) public StaticGestureStatus GetCurrentStaticGesture(HandType handType)
注解:获取当前手势
参数:handType,对应左右手
b) public bool GetKeyDown(StaticGestureStatus gestureStatus, HandType handType)
注解:当前手势刚触发
c) public bool GetKeyUp(StaticGestureStatus buttonKey, HandType handType)
注解:当前手势刚触发结束
d) public bool GetKey(StaticGestureStatus buttonKey, HandType handType)
注解:当前手势一直触发
(1)描述
该类主要提供蓝牙设备连接扫描等功能。
(2)变量
a) BluetoolthList
注解:获取当前扫描到的蓝牙列表。
b) Ble_Bond_Status
注解:当前蓝牙设备状态。
c) onStateChange
注解:蓝牙状态改变回调。
d) onScan
注解:扫描到蓝牙设备回调。
(3)接口
a) public void StartBle()
注解:启动蓝牙扫描功能,需要先开启蓝牙功能以后调用。
b) public void openBluetooth()
注解:开启设备蓝牙
c) public void closeBluetooth()
注解:关闭蓝牙设备
d) public void connectBle(string bleInfo)
注解:连接蓝牙设备
e) public void disconnect(string bleInfo)
注解:断开蓝牙连接
f) public void unpairDevice(string bleInfo)
注解:取消蓝牙配对
g) public void Scan()
注解:刷新蓝牙列表
1.slam优化 2.rgb/fisheye apriltag 识别速度优化 3.优化了手势交互 4.渲染优化,增强MR眼镜的显示效果 5.新增静态IP设置功能
1.增加新的眼控场景,参考场景EyeTrackingNew。 2.优化虚实合相推流投屏,适配不同眼镜。 3.添加3588控制器交互。
1.新增RGB曝光参数设置API.xslam_rgb_set_exposure()。 2.新增RGB定焦变焦调节接口API.xslam_zoom_lens()、API.xslam_prime_lens()。 3.新增tof相机曝光设置XvCameraManager.SetTofExposure(int exposureTimeMs)。
1.新增tof相机流模式配置项。 2.新增禁用计算单元的Back或者Home按键返回主菜单接口。
1.新增sony tof相机图像获取。 2.新增IR图像转换到世界坐标空间下的坐标场景。 3.修复API.xslam_reset_slam接口崩溃问题。
1.新增XvCameraManager脚本,添加tof IR图像获取接口。 2.修复rgb识别自定义二维码问题。
1.修复语音命令词自定义问题。 2.修复混合显示铺捉Camera剔除问题。
该版本主要增加wifi和蓝牙相关示例场景,可以查看示例场景XvXRFoundation/SampleScenes/BlueTooth和XvXRFoundation/SampleScenes/Wifi
初始版本,包含眼控功能,头瞄点和UGUI交互功能、手柄交互功能、虚拟键盘输入、本地视频录制,本地视频截图、RTSP推流、平面检测、空间Meesh扫描、Cslam地图创建、语音识别、Apriltag和QRCode识别等功能,具体用法可参考"4 示例场景"。