C# 第二控制器动作VRTK HTC Vive
我们开始为HTC Vive创建应用程序,最初没有使用VRTK。最近,我们切换到使用VRTK,遇到了一个问题,当一个控制器按住触发器,另一个按下另一个按钮时,我们想要执行一些操作。我们如何使用VRTK实现这一点? 我们的现行守则:C# 第二控制器动作VRTK HTC Vive,c#,unity3d,vrtk,C#,Unity3d,Vrtk,我们开始为HTC Vive创建应用程序,最初没有使用VRTK。最近,我们切换到使用VRTK,遇到了一个问题,当一个控制器按住触发器,另一个按下另一个按钮时,我们想要执行一些操作。我们如何使用VRTK实现这一点? 我们的现行守则: controllerMain = SteamVR_Controller.Input((int)trackedObj.index); controllerSecondary = SteamVR_Controller.Input(SteamVR_Controller.Get
controllerMain = SteamVR_Controller.Input((int)trackedObj.index);
controllerSecondary = SteamVR_Controller.Input(SteamVR_Controller.GetDeviceIndex(SteamVR_Controller.DeviceRelation.Leftmost));
// In Update()
if (controllerMain.GetPressDown(triggerButton) && controllerSecondary.GetPressDown(triggerButton))
{
scaleSelected(gameObj); //enlarges selected GameObject based on distance between controllers
}
if (controllerMain.GetPressDown(triggerButton) && controllerSecondary.GetPressDown(gripButton))
{
deleteObject(gameObj); //delete selected GameObject
}
我在VRTK文档中找不到使用两个控制器与同一对象交互的示例。在文档/示例中,所有内容都是基于事件的,而我们的代码不是,并且没有两个控制器的操作示例。我们如何实现类似的行为
编辑-
只需使用布尔值保持每个触发器的状态:
bool triggerMainPressed;
bool triggerSecondaryPressed;
void Update()
{
if (controllerMain.GetPressDown(triggerButton))
{
triggerMainPressed = true;
}
if(controllerSecondary.GetPressDown(triggerButton))
{
triggerSecondaryPressed = true;
}
if (controllerMain.GetPressUp(triggerButton))
{
triggerMainPressed = false;
}
if(controllerSecondary.GetPressUp(triggerButton))
{
triggerSecondaryPressed = false;
}
if(triggerMainPressed && triggerSecondaryPressed)
{
scaleSelected(gameObj); //enlarges selected GameObject based on distance between controllers
}
else if(triggerMainPressed && controllerSecondary.GetPressDown(gripButton))
{
deleteObject(gameObj); //delete selected GameObject
}
}
当您与对象(与抓取控制器)交互时,您知道哪个控制器正在进行抓取,因此您可以通过检查现有控制器的手,然后获取另一只手来找出另一个控制器,如下所示:
GameObject otherController;
if(VRTK_DeviceFinder.IsControllerLeftHand(grabbingObject)
{
otherController = VRTK_DeviceFinder.GetControllerRightHand();
}
else
{
otherController = VRTK_DeviceFinder.GetControllerLeftHand();
}
它基本上是检查当前抓取控制器,如果它是左手,那么你需要右手(反之亦然)
弓箭示例脚本显示了这一点,它们可以在示例目录中找到。是的,这将起作用(基本上就是我们所拥有的),但我正在特别寻找VRTK解决方案。我如何通过VRTK知道哪个控制器向我发送事件?@Stacker Ho抱歉,我误解了你的问题