2016-04-13 5 views
0

Ich versuche, in Unity ein Zielsystem zu erstellen, bei dem der Zeigefinger zur Steuerung eines Fadenkreuzes verwendet wird. Das Spiel wird mit Oculus und Leap Motion auf dem Oculus Headset abgespielt.LeapMotion + Unity: Verschieben eines Objekts in einer 3D-Welt basierend auf dem Winkel eines Fingers

Ich habe versucht, die Position für das Fadenkreuz basierend auf dem Winkel des Zeigefingers zu berechnen und einen Strahl basierend auf einer gegebenen Entfernung zu zeichnen. Ich habe auch versucht, nur auf der Grundlage der Richtung des Zeigefingers und bestimmten Abstand wie dies mit dem Fadenkreuz Standort Berechnung:

Vector3 targetPoint = direction * direction; 

Hier ist, was ich habe versucht:

void Start() { 
    crossHair = GameObject.Find("Crosshair Component"); 
    myCamera = GameObject.Find("CenterEyeAnchor"); 
    target = crossHair.transform; 
    controller = new Controller(); 
    indexFinger = new Finger(); 

    void Update() { 

    crossHair.transform.position = myCamera.transform.position; 
    frame = controller.Frame(); 
    List<Hand> handList = new List<Hand>(); 
    for (int h = 0; h < frame.Hands.Count; h++) 
    { 
     Hand leapHand = frame.Hands[h]; 
     handList.Add(leapHand); 
    } 

    if (handList != null && frame.Hands.Count > 0) { 
     indexFinger = frame.Hands[0].Fingers[(int)Finger.FingerType.TYPE_INDEX]; 
     if (indexFinger.IsExtended) 
     { 
      Vector3 fingerTipPos = indexFinger.TipPosition.ToUnityScaled(); 

      Vector3 originAngle = indexFinger.TipPosition.ToUnityScaled(); 
      Vector3 targetAngle = crossHair.transform.position; 
      float distance = 1; 

      Vector3 direction = indexFinger.Direction.ToUnityScaled(); 
      Ray rayToTest = new Ray(originAngle, targetAngle); 
      Vector3 targetPoint = rayToTest.GetPoint(distance); 

      //Problem is here. How should these targetPoint values be used to calculate correct position for the crosshair? 
      crossHair.transform.position = new Vector3(crossHair.transform.position.x + (targetPoint.x), y, 
                crossHair.transform.position.z + (targetPoint.z)); 
     } 


    } 
} 

}

Mit ähnliche Berechnungen wie diese konnte ich das Fadenkreuz entsprechend auf horizontaler Ebene verschieben, indem ich x- und z-Werte ändere, aber die y-Achse scheint das größte Problem zu sein. Die Y-Achse scheint immer zu niedrige Werte zu erhalten. Das Fadenkreuzelement wird als untergeordnetes Element für das CenterEyeAnchor-Kameraobjekt in Unity platziert.

So Fragen sind: Ist die Art der Berechnung der Zielpunktposition richtig, wie ich versucht habe, es zu machen? Welche Art von Berechnungen müsste ich für die Fadenkreuzposition basierend auf dem neuen Zielpunktwert durchführen, damit er sich entsprechend der Zeigefingerbewegung verhält? Skalierungsfaktoren für die Werte?

+0

ich bin sehr vertraut mit Oculus und vertraut mit Sprung, aber es ist fast unmöglich, es sei denn, Sie irgendeine Art von Screenshot zeigt das Setup Ihrer Objekte enthalten zu helfen. es ist derzeit absolut unmöglich, "wo etwas ist" zu wissen. – Fattie

Antwort

Verwandte Themen