3.快速开始

此文档帮助开发者使用SDK快速开始创建一个可以在 Rhino X 上运行的MR程序,了解SDK的使用流程以及文件结构,快速熟悉SDK。

关于SDK的详细功能、组件以及API,请查看后面的章节。

注意

此SDK只支持Rhino X头显,请勿在RhinoX Pro头显上使用此SDK

3.1 快速使用SDK

1.下载 SDK

在开发者网站选择UnitySDK,点击 “下载最新版” 下载SDK,下载后将压缩包解压,会得到如下3个版本的Unitypackage

_images/SDK_download.png

然后根据你需要使用的Unity编辑器版本选择对应的SDK包,切忌使用错误的Unity编辑器版本打开。

注解

使用2019版本时,Unity版本必须是2019.4或以上版本,且必须使用URP

2.创建新项目

1.通过Unity Hub创建新项目,创建时选择需要使用的Unity版本、选择3D模板、设置Project Name、选择Project路径

_images/Create_Project.png

2.创建新项目之后,在新项目窗口选择 Assets -> Import Package -> Custom Package… 来导入SDK

注解

选择的Unitypackage必须与刚才创建项目所选的Untiy编辑器版本一致

3.导入SDK,选择 All ,然后点击 Import

_images/Import_SDK.png

3.UnitySDK 配置

  1. SDK初始化

初次导⼊ SDK 进 Unity 项目中之后,必须通过 RhinoX SDK/Initialize 完成初始化。点击此按钮将初始化 RhinoX SDK 所需要的设置。

_images/unitysdk_init.jpg

注解

-设置URP(2019.3、2019.4及以上版本需要),参考 unity2019设置URP的官方文档

-如果未进行初始化,可能会出现显示异常

2.项目设置

先在 File -> Build Settings 中将打包平台切换为Android

_images/Switch_Platform.png

接下来在Player Settings中按照如下图设置:

_images/Player_setting.png

4.打包应用

RhinoX - Interaction - Demo - Two Hands demo场景展示了SDK的所有主要交互功能,您只需要打包此场景即可,请忽略其他Scene。

将需要打包的场景添加build场景中,然后勾选场景,点击右下角Build即可打包出一个apk文件。

您可以在Player Setting中设置修改Product Name以及Package Name,避免重复。

_images/unitysdk_demo_build.png

5.安装运行应用

参见 1.4.2 安装运行RhinoX应用

3.2 SDK Demo介绍

此章节详细介绍SDK里面的主要demo的文件结构,帮助您快速了解SDK的基本使用方法,如果您对具体的组件使用方法理解起来有困难 可以参考此demo进行详细对比,或者直接在此demo基础上进行改造。

3.2.1 文件结构

用 Unity 打开 sdk 项目以后⽂件路径结构如下:

_images/unitysdk_file_list.jpg

小技巧

如上面文件结构所示,SDK 的所有内容都在 Plugins 文件夹中,如需在其他项目中使用SDK,只需复制粘贴 Plugins 文件夹中所有内容到其他 Unity 项目中的 Plugins 文件夹中即可。

Plugins/Android ⽂件夹

AndroidManifest.xml:此⽂件定义RhinoX所必须的所有权限请求, 默认权限请不要修改,如需其他权限请自行添加。

Plugins/Android/assets:所有可追踪物体的标定⽂件(json 和 dat⽂件) 必须被存放在此路径中。 实际内容可能和此图有不同。

Plugins/Android/libs: 存放usb权限请求⽂件。 此⽂件夹装载所有必须的代码库,这些库⽂件是视觉算法的核⼼⽂件, 请不要删除或者移动这些⽂件

Plugins/RhinoX ⽂件夹

Plugins/RhinoX/Assets: 此文件夹中主要存放手柄交互相关资源,包括左右手柄的预制体,您可以直接通过他们来创建手柄交互组件

Plugins/RhinoX/OpenSource: 此文件夹里面主要存放RhinoX 交互系统代码,这些是开源⽂件,如果有需要⽤户可以修改这些⽂件

对应的Unity文件夹里面则存放SDK的DLL文件,建议不要改动此文件夹

3.2.2 初始化流程介绍

初始化内部⼯作流程:

设置关键类的 execution order

设置 PlayerSetting / MultiThread Rendering = False

设置 QualitySetting / VysncCount = Don’t Sync

设置 Default Orientation = Landscape Left

3.2.3 场景介绍

此demo里面的主场景为 RhinoX - Interaction - Demo - Two Hands demo ,主要展示以下功能:

  • 利用Beacon作为GroundPlane来定位虚拟场景的原点位置,同时支持1、2、3号Beacon

  • 利用手柄提供6dof的交互功能,同时支持单手柄和双手柄

  • 提供可供触碰、抓取、抛掷的Cube模型

场景结构如下:

_images/unitysdk_demo_file.jpg

下面我们将介绍场景中最重要的几个GameObject模块,其他次要模块请您自行学习相关unity基础

1. ARCameraRig

_images/arcamera.jpg

ARCameraRig的子对象为ARCamera,他代表了我们的头显,因此场景必须有且只有一个 ARCamera 脚本存在。

ARCamera 脚本会让这个 Camera 以双目方式渲染,对可跟踪的物体进行识别,并且接受 VIO 算法的方位更新。

Tracking Config 下的选项可以让你控制头显的跟踪设置,如是否跟踪位置或者姿态,以及添加Tracking Profile

Reticle Config可以设置是否启用头瞄功能,可以通过反选Enable Reticle隐藏头显里面的小白点

警告

Tracking Profile必须包含需要跟踪的配置文件,不可为空。

2. Ground Plane

_images/unitysdk_ground_plane.jpg

GroundPlane的作用是定位整个虚拟场景的地面位置,直接在场景的根目录下创建,可以创建多个,通常我们将他们的Transform设置(0,0,0)

我们通过Trackable Identity脚本来将GroundPlane与实际的定位信标进行绑定。通常我们将Beacon作为GroundPlane使用,即通过Beacon来控制场景的摆放位置。

GroundPlane脚本中的具体参数配置请查看 Ground Plane 介绍

3. RxPlayerHand-RightHand

_images/unitysdk_rxcontroller.jpg

此object代表我们的右手柄,left则代表左手柄,用于对场景中的对象进行交互

如果您需要创建新项目,建议您直接从下面路径导入手柄预制体,一般不需要您做修改,如果您对这个对象有兴趣,可以查看第4章文档 进行详细学习。

_images/Controler_prefeb.png

手柄其实就是最典型的 Dynamic Target 对象,所以此对象上挂载了Dynamic Target以及Trackable Identity脚本

其他脚本的详细信息请参考第4章 RxController

4. Touchable/Grabable/Throwable

这些为可交互对象,分别为可触摸、可抓取、可抛掷,如果你需要使用类似功能,请参照demo进行创建

如果您对这些交互组件有疑问,或者使用上有困惑,请查看第4章,交互组件

5. RxEventSystem

当场景中添加 RxButtonEventTrigger 的时候被自动创建,是监听 RhinoX 硬件输入的系统模块,详细信息请查看 事件系统