问题标签 [steamvr]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
unity3d - 防止 Unity 中的物理计算吃太多 FPS 的最佳方法?
我是一名高级软件工程师,但对 Unity 编程完全陌生。几周以来,我一直在通过为自己编写一些 SteamVR 玩具来自学 Unity。我想询问 Unity 的标准内置方法来提高具有大量密集物理计算的程序的帧速率。
在我当前的 VR 场景中,我有一个球,Rigidbody
上面有一个。当我把它捡起来扔的时候,我让它自然地移动,但我在每次Update()
调用时都会用很小的力来调整着陆位置,并且总是击中目标。
我看到我的帧率大幅下降,所以我编写了自己的函数来限制更新,将它们限制为每秒 5 次。问题是,我应该使用一些标准的 Unity 行为而不是自己滚动这段代码吗?
在我的投掷脚本中,我维护了一堆顶级变量并首先更新它们以决定是否应该对当前帧进行计算。
在每一帧上,我运行这个函数,然后如果isCalculationFrame
是真的,我继续计算和添加力向量。我只是想知道我是否忽略了一些更标准的方法来用更少的代码做到这一点?我觉得这一定是一件很常见的事情。
c++ - 创建单个线程时 SteamVR 帧峰值
我有一个使用 SteamVR/OpenVR 的本机 C++ 应用程序。在某些帧中,我正在创建多个线程来分配一些工作。所有这些线程必须在继续之前完成,所以我立即调用它们加入。
尽管多线程计算花费的时间不超过 1 毫秒,但帧时间(如 SteamVR 提供的帧同步窗口所示)仍然飙升至 16 毫秒以上(比例停止在 16 毫秒)。
只需在 OpenVR 示例项目hellovr_opengl中启动一个单独的空线程并在之后立即加入即可轻松复制该问题。在我的例子中,我在 MainApplication 的 RenderFrame() 函数中插入了这个代码片段,但其他任何地方都可以正常工作:
在我自己的应用程序中,我每帧都获得了高帧时间。在 OpenVR 示例项目中重现该问题时,它似乎每隔几帧就会发生一次,但仍然非常频繁:
我当然知道,如果我每帧重用线程,我可能应该池化线程,但无论如何,创建(和加入)单个(甚至几个)线程不应该花那么长时间。正如时间测量所示,它甚至没有接近 16 毫秒。那么为什么 OpenVR 会停滞这么长时间呢?
unity3d - Unity:SteamVR TeleportArc 在 Build 中碰撞不正确
我正在使用 Unity 2019.4.9f1 和 SteamVR。传送系统在游戏模式中按预期工作。当我构建时,TeleportArc 有一些奇怪的碰撞故障。最后的点与网格碰撞不正确。对撞机似乎在地板下面(虽然仍然正常工作),或者墙网等。我还能够通过网格看到 TeleportPoint。
编辑器播放模式:
建造:
有没有人遇到过这样的错误?提前致谢。
编辑:我想在我的帖子中展示这些图片,但由于我的业力,我不允许这样做。
virtual-reality - OpenVR:找不到接口“IVRCompositor_027”
我克隆了openVR repo,直接编译了driver_sample、hellovr_dx12和hellovr_opengl项目。构建是成功的。但是两个 helloVR 应用程序都未能启动并出现错误:
除了我的猜测是变量IVRCompositor_Version
可能需要适当设置之外,我没有任何线索,但是如何找到正确的版本?
在 Windows 10、VS2019 上使用 SteamVR 1.15.15。HMD (HTC Vive) 已正确设置。
unity3d - SteamVR 短距离抓斗
我正在使用 SteamVR 插件制作 VR 游戏。在这个插件中,他们制作了它,所以当你的手放在它上面时你可以抓住东西。但是,我希望能够在站立时从地板上捡起东西,或者离得更远一点。展示这种能力的好游戏是 Rec Room。我遵循的教程是这个https://www.youtube.com/watch?v=5C6zr4Q5AlA&ab_channel=Valem如果有人对此有答案,那就太好了!
谢谢!
unity3d - 当我使用 SteamVR_LoadLevel 加载新场景时,所有控制器都冻结
嘿,我正在团结一致地开发 VR 应用程序。我的项目中有一些场景。一切都很好的第一个场景。有一个关卡我正在使用“播放器”预制件,当我使用 SteamVR_LoadLevel .Begin 函数开始加载新场景时,下一个场景加载正常,我的 HMD 运行良好,但控制器冻结。我是下一个场景中的 CameraRig,我在场景前用检查器内的复选框(未选中)销毁 Player [SteamVR] 游戏对象。
我正在尝试 Unity SceneManagement 或其他东西,但我找不到解决方案。顺便说一句,如果我直接运行那个场景,每个控制器都可以正常工作。
等待您的答复谢谢。
c++ - SteamVR 覆盖控制器输入?
我想覆盖我的控制器输入。例如交换控制器按钮动作。我的方法是使用 OpenVR 创建一个自定义控制器,但是我无法检索我的控制器输入并将它们提供给我创建的控制器。
我知道我可以获得控制器输入,只是为了阅读。但是我如何覆盖它们,有可能吗?任何帮助将不胜感激。谢谢。
aframe - SteamVR 头戴式设备(如 HTC Vive)是否不再适用于 A-Frame 和 WebVR 或 WebXR?
我一直在努力让我的 A-Frame 场景通过 SteamVR 在我的 VR 耳机中显示。简而言之,我的目标是找到一种方法让 A-Frame 项目在我的头显上正确显示,但我的头显没有收到来自 A-Frame 场景的任何馈送,而是显示纯灰色或黑色。奇怪的是:有时,我可以让 A-Frame 场景显示在我桌面上的 SteamVR VR 视图窗口中,但是当我戴上耳机时,显示仍然是灰色或黑屏。不幸的是,在我尝试在其中运行 A-Frame 场景的浏览器的控制台日志中(到目前为止)没有遇到任何错误。
值得一提的是,HTC Vive 耳机和 OptiTrack 设备确实可以工作。它们适用于 Unity 程序和其他 VR 应用程序。他们只是不使用 WebVR、WebXR 和 A-Frame 程序。
通常发生的情况是,当我在 Web 浏览器选项卡中手动或使用 http-server 和 ngrok 打开 A-Frame 场景时,该场景在桌面显示器上运行良好。但是,它会继续打开 SteamVR 并尝试连接到我的耳机。SteamVR 通常会说Playing Firefox或Playing Chrome。有时 A-Frame 场景会出现在 SteamVR 应用程序的 VR 视图中,但每次我尝试此操作时,耳机显示屏都会变黑或变灰。这是我所能得到的。
设备:
- HTC Vive Pro Eye(带 OptiTrack 有源标签附件和无线适配器)
- OptiTrack 红外摄像机(不使用基站)
- HP Z4 台式工作站计算机
这是我到目前为止所尝试的:
- 在 Chrome、Chromium、Firefox、Edge 和 Firefox Nightly 等浏览器中启用 web xr 和 vr 标志(但是,对于 Chrome 等浏览器,我无法在任何地方找到 web vr 或 xr 标志)
- 在提供启用/禁用 xr 沙箱选项的 Web 浏览器中禁用 xr 沙箱
- 试用 SteamVR 测试版
- 使用带有 Edge 的混合现实 HP 耳机(背包式 VR 电脑随附的耳机)
- 尝试不同版本的 A-Frame
- 尝试使用一些人推荐的 Supermedium,但我认为不会打开 A-Frame 场景......
我会粘贴错误和代码片段,但对于这种情况,它没有任何意义,因为没有弹出错误,而且问题不太可能来自 HTML/JavaScript A-Frame 代码。感谢您花时间阅读和考虑这个问题!如果您需要任何其他详细信息,我会在这里提供,所以请告诉我。