2017-02-07 1 views
1

最初にVRTKを使用せずにHTC Viveのアプリケーションを作成し始めました。最近、私たちはVRTKの使用に切り替わり、あるコントローラーがトリガーを保持していて、もう1つのコントローラーが別のボタンを押しているときにいくつかのアクションを実行したいという問題に直面しました。 VRTKを使ってこれをどのように達成するのですか? 我々の現在のコード:第2コントローラのアクションVRTK HTC Vive

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のドキュメント内の同じオブジェクトと対話するために使用されているすべての例を見つけることができませんでした。 docs/examplesでは、すべてがイベントベースですが、コードはそうではなく、両方のコントローラでのアクションの例はありません。どのように私たちは同様の行動を達成するのですか?

編集 - VRTK

答えて

1

あなたは(つかんコントローラー付き)のオブジェクトと対話しているとき、あなたがやっているコントローラを知っていますしたがって、あなたは既存のコントローラの手をチェックして、もう一方の手を得ることによって、他のコントローラを見つけることができます:

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

現在の把持コントローラのチェックは基本的に行います。左手の場合は右手が必要です(またその逆もあります)。

弓矢のスクリプト例を示しています。これは、Examplesディレクトリにあります。

0

単にブールで各トリガーの状態を保つ:

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

はい、これは機能しますが(本質的に私たちが持っているもの)、私は特にVRTKソリューションを探しています。どのコントローラが私にイベントを送っているのかをVRTK経由でどのように知ることができますか? – stackErr

+0

@stackErrあなたの質問に誤解して申し訳ありません –

関連する問題