繁体   English   中英

第二个控制器动作 VRTK HTC Vive

[英]Second Controller actions VRTK HTC Vive

我们开始为 HTC Vive 创建一个应用程序,最初没有使用 VRTK。 最近我们切换到使用 VRTK 并遇到了一个问题,我们想要在一个控制器按住触发器而另一个控制器按下另一个按钮时执行一些操作。 我们如何使用 VRTK 实现这一目标? 我们当前的代码:

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 文档中找不到任何两个控制器都用于与同一对象交互的示例。 在文档/示例中,一切都是基于事件的,而我们的代码不是,并且没有两个控制器的操作示例。 我们如何实现类似的行为?

编辑- VRTK

当您与对象(使用抓取控制器)交互时,您知道哪个控制器正在执行抓取,因此您可以通过检查现有控制器的手然后获取另一只手来找出另一个控制器,如下所示:

GameObject otherController;
if(VRTK_DeviceFinder.IsControllerLeftHand(grabbingObject)
{
  otherController = VRTK_DeviceFinder.GetControllerRightHand();
}
else
{
  otherController = VRTK_DeviceFinder.GetControllerLeftHand();
}

它基本上会检查当前的抓取控制器,如果它是左手,那么你想要右手(反之亦然)。

弓箭示例脚本显示了这一点,它们可以在示例目录中找到。

只需使用布尔值保持每个触发器的状态:

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
    }   
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM