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!
我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当
我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm
我们的git存储库中目前有一个Gemfile。但是,有一个gem我只在我的环境中本地使用(我的团队不使用它)。为了使用它,我必须将它添加到我们的Gemfile中,但每次我checkout到我们的master/dev主分支时,由于与跟踪的gemfile冲突,我必须删除它。我想要的是类似Gemfile.local的东西,它将继承从Gemfile导入的gems,但也允许在那里导入新的gems以供使用只有我的机器。此文件将在.gitignore中被忽略。这可能吗? 最佳答案 设置BUNDLE_GEMFILE环境变量:BUNDLE_GEMFI
这似乎非常适得其反,因为太多的gem会在window上破裂。我一直在处理很多mysql和ruby-mysqlgem问题(gem本身发生段错误,一个名为UnixSocket的类显然在Windows机器上不能正常工作,等等)。我只是在浪费时间吗?我应该转向不同的脚本语言吗? 最佳答案 我在Windows上使用Ruby的经验很少,但是当我开始使用Ruby时,我是在Windows上,我的总体印象是它不是Windows原生系统。因此,在主要使用Windows多年之后,开始使用Ruby促使我切换回原来的系统Unix,这次是Linux。Rub
我正在玩HTML5视频并且在ERB中有以下片段:mp4视频从在我的开发环境中运行的服务器很好地流式传输到chrome。然而firefox显示带有海报图像的视频播放器,但带有一个大X。问题似乎是mongrel不确定ogv扩展的mime类型,并且只返回text/plain,如curl所示:$curl-Ihttp://0.0.0.0:3000/pr6.ogvHTTP/1.1200OKConnection:closeDate:Mon,19Apr201012:33:50GMTLast-Modified:Sun,18Apr201012:46:07GMTContent-Type:text/plain
无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD
我的工作要求我为某些测试自动生成电子邮件。我一直在四处寻找,但未能找到可以快速实现的合理解决方案。它需要在outlook而不是其他邮件服务器中,因为我们有一些奇怪的身份验证规则,我们需要保存草稿而不是仅仅发送邮件的选项。显然win32ole可以做到这一点,但我找不到任何相当简单的例子。 最佳答案 假设存储了Outlook凭据并且您设置为自动登录到Outlook,WIN32OLE可以很好地完成此操作:require'win32ole'outlook=WIN32OLE.new('Outlook.Application')message=
在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList()Obt
1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,
Ⅰ软件测试基础一、软件测试基础理论1、软件测试的必要性所有的产品或者服务上线都需要测试2、测试的发展过程3、什么是软件测试找bug,发现缺陷4、测试的定义使用人工或自动的手段来运行或者测试某个系统的过程。目的在于检测它是否满足规定的需求。弄清预期结果和实际结果的差别。5、测试的目的以最小的人力、物力和时间找出软件中潜在的错误和缺陷6、测试的原则28原则:20%的主要功能要重点测(eg:支付宝的支付功能,其他功能都是次要的)80%的错误存在于20%的代码中7、测试标准8、测试的基本要求功能测试性能测试安全性测试兼容性测试易用性测试外观界面测试可靠性测试二、质量模型衡量一个优秀软件的维度①功能性功