首页 > 解决方案 > 如何从 SteamVR 2.0 获取 Unity 项目的 Vive 控制器转换组件?

问题描述

我目前正在使用 Zed 迷你相机在 Unity 中开发 AR 应用程序。Zed SDK 附带一个 Zed_Controller_Tracker 脚本,您可以将该脚本附加到游戏对象,以便将该对象跟踪到所选设备(在本例中为控制器)。不幸的是,该脚本不足以满足我的需求。附着的物体经常漂移或抖动,并且不会返回到适当的位置。这表明这是一个跟踪问题,可能在我这边。作为一种解决方法,我想编写自己的脚本来获取控制器位置并将对象附加到控制器。

伪代码:

SteamVR_Controller controller;
GameObject trackedObject;

void update(){
    trackedObject.position = controller.GetComponent(Transform()).position;
}

以上是代码应该是多么简单。我面临的问题是,在 SteamVR 2.0 中,没有 SteamVR_Controller 这样的东西。我已经看过了,但找不到任何可以让我定义控制器对象的东西。在 steamvr 2.0 中有一个名为 SteamVR_Behaviour_Pose 的东西,它“将其添加到游戏对象以自动设置变换的位置和旋转以匹配您的跟踪对象(通常是控制器)。” 这听起来正是我想要的,只是它不能按我需要的方式工作。我创建要跟踪的对象,附加脚本,将输入源设置为右手,对象被跟踪,只是它有轻微的偏移。我已经尝试为对象设置父对象以修复偏移量,使其居中,

最后,我能想出的唯一适合我需要的解决方案是制作自己的脚本,但我需要知道如何使用 steamVR 2.0 调用 controller.position,这似乎不是一件容易的事。请帮忙 :)

注意:使用控制器预制件不起作用,因为 zed mini 和 vr 世界之间存在偏移。基本上,AR(真实)控制器稍微位于 VR 控制器的右侧,当我调整此偏移量以使两者重叠时,新问题是两者的旋转弧不一样。将控制器移动 90 度会以相同的方式移动两者,但不会沿相同的弧线移动,这会导致两者之间出现新的偏移。可以编写一个脚本来解决这个问题,但我预计它会非常复杂并且只会导致更多麻烦。

标签: unity3daugmented-realityhtc-vivesteamvr

解决方案


推荐阅读