赞
踩
1,开发阶段,VR设备厂商SDK各异:
pico和Oculus是国内外的vr设备代表,各自提供了不同的厂商SDK(unity 插件)进行快速上手,但也可能因此调用了厂商私有接口导致不兼容;
2,编译运行,设备商SDK编译应用兼容问题:
即使应用开发中没有直接使用私有接口,但基于厂商SDK编译出的apk也并未完全兼容,底层不同的XR loader、运行时带来的典型的问题包括:VRorigin绑定错乱、追踪失效、运行崩溃等;
3,各厂商在积极拥抱openxr
Oculus已经全面支持openxr,直接使用unity openxr plugin已经提供了Oculus支持,其他OVR特性抽取到integration SDK中供平台开发时选用;PICO也在近期对SDK进行了调整,可以看出最近的SDK也按此划分了基础和平台部分,只是目前基础部分宣称支持openxr(native runtime),还没有直接支持到unity官方plugin。
开发环境的认识依然要从前文介绍过的Unity 的 XR框架开始,以插件框架的机制铺开,该框架使 厂商的XR 提供程序可与 Unity 引擎集成并实现其具体子系统功能。
这种基于插件框架打造“XR SDK壳”的方法,提高了 Unity 的能力:一方面对应用开发者来说,向上解耦了应用开发和底层特定运行时的关系;另一方面支持平台合作伙伴分发 SDK 更新,以支持新的 XR 设备和运行时,而无需修改核心引擎。
用于创建 VR 和 AR 体验的、基于组件的交互系统。提供统一的interaction manager机制,通过为对象分别导入配置Interactor (射线等)、Interactable(cube等) 交互组件,进行抓取等交互;
重点是:XRIT支持openxr,并提供了多个基于openxr的交互组件;
unity推出的新输入系统, 原有UnityEngine.Input的替代方案。通过配置式的action map进行多对多的输入和回调的映射,使得输入响应与具体设备抽象出来,扩展性更强,同时入手难度也变大。
重点是:XRIT中inputsystem默认自带一个早期input system包,XRIT提供各种action based交互组件以支撑自定义配置事件源,使得新系统的入手难度降低;
OpenXR 是由 Khronos 开发的开放标准,允许开发人员面向抽象的 AR/VR 设备进行开放。unity中使用此插件可在 XR 插件管理中启用 OpenXR。
该插件也将XR SDK离散的框架进一步收拢,规范了设备需要为unity SDK的 XR提供者和特性 进行的实现和适配。
Unity XR 框架整合 OpenXR的示意图回顾:
注:openXR plugin要求必须采用新的input system;
小结:
XRIT是unity 开发的已有XR开发核心模块,支持action based的input system;openXR是未来的统一方向,其plugin要求事件输入使用input system;
input system提供了Cross-platform XR 设备输入,满足一次开发的需求;
unity上基于unity XR接口开发,基于openxr编译统一loader和运行时的调用,是比较理想的应用解决方案,即一次编写一次编译;
unity的openXR插件开发支持进展不同,当前从验证效果来看:Oculus quest2已基本适配对接OpenXR plugin编译,而PICO则未支持,从官方roadmap和论坛答复看需要2020年8月份后,但与官方plugin直接对接似乎要延迟(PICO UnityXR SDK对接OpenXR标准);
因此目前兼容Pico和Oculus还需要一次编写、分开编译。
具体为在build的project的plugin配置中,为pico选用pico plugin;为Oculus选用openxr或Oculus plugin;
硬件:PICO和Oculus基于安卓系统,有关必要的开发设置和驱动等安装类同手机不作赘述,其中PICO可以通过打开原生Android的设置进行网络和休眠时间等的设置;
软件:unity最低 版本使用2020,目前推荐使用unity hub进行集成安装和project创建启动管理,证书可使用个人版(有效期只有几天,但会自动延期);
新建项目:使用hub新建项目,选择3D模板;不建议采用VR模板,其中主要多一个rig绑定对象,但无法直接试用到设备,后续通过导入XR包创建。
熟悉unity项目面板:官方面板介绍手册
使用 USB-C 数据线将设备连接到计算机,然后戴上设备。
当提示开发者选项或允许访问数据时,单击允许。
Oculus请下载 OEM USB 驱动程序。
要验证连接,请打开 Unity 项目,然后在菜单上,转到File > Build Settings。
在Platform列表中,选择Android,然后单击Switch Platform。
在“运行设备”列表中,请点击刷新,查看和选择已连接成功的设备。
PICO开发包,从官方网站下载和导入;
Oculus集成包和插件,从Unity Asset Store下载,(可选,建议采用openXR插件)
XRIT,从package manager面板搜索导入;
openXR plugin,从package manager面板搜索导入;
input system,建议从package manager更新到最新版本;
如有需要从unity assert store搜索添加资源的,如图package manager左上角切换到“My Asserts”可以找到和导入;
一体机大致相同,通过菜单上,转到Edit > Project Settings,配置player几个重要项:
Color Space 用linear,
版本、最小Android API LEVEL、脚本后端、目标架构
input 处理选用new input system,会重启unity
进入project settings,plugin manager中选择Android tab配置插件:
导入interaction toolkit的start assert,包含了基本的action map、controller预制;
在inspect中设置为默认,以便导入origin的时候将其直接应用上
在3D项目中接着创建XR origin action based,一个基于新input system的action配置式输入的第一人称对象,
为XRIT配置默认的“输入处理器”和“action map”:
回到Build Settings面板,编译apk到设备上运行,如可看到第一人称附带controller射线的场景,SUCCESS!
添加2Dcanvas和3D物体cube,或导入openXR plugin的controller sample(带一个canvas和cube)
通过add component,添加射线交互
为3D物体添加grab interactable
为2D的canvas添加受追踪设备的图形射线检测,接收raycaster交互
回到Build Settings面板,编译apk到设备上运行,如果第一人称可使用controller射线并可点击canvas的button,可抓取cube,SUCCESS!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。