2017-02-07 3 views
1

Wir begannen eine App für HTC Vive zu erstellen, ohne VRTK zunächst zu verwenden. Vor kurzem sind wir zu VRTK übergegangen und hatten ein Problem, bei dem wir etwas tun wollen, wenn ein Controller den Trigger hält und der andere einen anderen Knopf drückt. Wie erreichen wir dies mit VRTK? Unser aktueller Code:Second Controller Aktionen 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 
} 

Ich konnte keine Beispiele finden, wo beide Controller verwendet werden, mit dem gleichen Objekt in dem VRTK docs zu interagieren. In den Dokumenten/Beispielen ist alles ereignisbasiert, während unser Code nicht vorhanden ist und es keine Beispiele für Aktionen mit beiden Controllern gibt. Wie erreichen wir ein ähnliches Verhalten?

Bearbeiten- VRTK

Antwort

1

Wenn Sie mit dem Objekt sind die Interaktion (mit der Greif Controller) Sie wissen, welche Controller tut das Greifen, deshalb können Sie den anderen Controller herausfinden, indem Sie die Hand des vorhandenen Controllers überprüfen und dann die andere Hand bekommen, so:

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

Was im Grunde eine Überprüfung des aktuellen Grab Controller und wenn es die linke Hand ist, dann wollen Sie die rechte Hand (und umgekehrt).

Die Beispielskripte mit Pfeil und Bogen zeigen, dass sie sich im Verzeichnis Beispiele befinden.

0

halten Sie einfach den Zustand jedes Trigger mit einem boolean:

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

Ja, das würde funktionieren (im Wesentlichen was wir haben), aber ich bin speziell auf der Suche nach einer VRTK-Lösung. Woher weiß ich über VRTK, welcher Controller mir die Ereignisse schickt? – stackErr

+0

@stackErr Tut mir leid, dass ich deine Frage missverstanden habe –

Verwandte Themen