2017-06-21 2 views
0

J'essaye de mettre en application une caractéristique semblable au contrôleur de HTC Vive avec le mouvement de saut sur mon projet d'unité. Je voulais générer un pointeur laser à partir de l'index et téléporter la chambre de la Vive sur la position du laser (comme c'est le cas avec le contrôleur). Le problème est la dernière documentation sur les mouvements de saut (orion), ce n'est pas clair. Des idées comment faire cela? Plus généralement, nous avons pensé utiliser HandController mais nous ne comprenons pas où ajouter le composant de script. Merci!Htc Vive + mouvement de saut comme contrôleur

Répondre

0

Je ne sais pas si le problème que vous rencontrez est d'obtenir des données de la main dans votre scène ou d'utiliser les données de cette main.

Si vous essayez simplement d'obtenir des données de main dans votre scène, vous pouvez copier un préfabriqué à partir de l'un des exemples de scènes du SDK Unity. Si vous essayez d'intégrer Leap dans une scène existante qui a déjà une configuration VR, consultez la documentation sur the core Leap components pour comprendre quels éléments doivent être en place pour commencer à obtenir des données de main. LeapServiceProvider doit être quelque part dans votre scène pour recevoir des données de la main.

Tant que vous avez un LeapServiceProvider quelque part, vous pouvez accéder à des mains du mouvement de saut tout scénario, partout. Donc, pour obtenir un rayon du bout du doigt d'index, pop juste ce script tout ancien lieu:

using Leap; 
using Leap.Unity; 
using UnityEngine; 

public class IndexRay : MonoBehaviour { 
    void Update() { 
    Hand rightHand = Hands.Right; 
    Vector3 indexTipPosition = rightHand.Fingers[1].TipPosition.ToVector3(); 
    Vector3 indexTipDirection = rightHand.Fingers[1].bones[3].Direction.ToVector3(); 
    // You can try using other bones in the index finger for direction as well; 
    // bones[3] is the last bone; bones[1] is the bone extending from the knuckle; 
    // bones[0] is the index metacarpal bone. 

    Debug.DrawRay(indexTipPosition, indexTipDirection, Color.cyan); 
    } 
} 

Pour ce que ça vaut la peine, la direction index du bout du doigt est probablement pas être assez stable pour faire ce que vous voulez. Une stratégie plus fiable consiste à lancer une ligne depuis la caméra (ou une «position d'épaule» théorique à un décalage constant de la caméra) à travers l'os d'articulation de la main:

using Leap; 
using Leap.Unity; 
using UnityEngine; 

public class ProjectiveRay : MonoBehaviour { 

    // To find an approximate shoulder, let's try 12 cm right, 15 cm down, and 4 cm back relative to the camera. 
    [Tooltip("An approximation for the shoulder position relative to the VR camera in the camera's (non-scaled) local space.")] 
    public Vector3 cameraShoulderOffset = new Vector3(0.12F, -0.15F, -0.04F); 

    public Transform shoulderTransform; 

    void Update() { 
    Hand rightHand = Hands.Right; 
    Vector3 cameraPosition = Camera.main.transform.position; 
    Vector3 shoulderPosition = cameraPosition + Camera.main.transform.rotation * cameraShoulderOffset; 

    Vector3 indexKnucklePosition = rightHand.Fingers[1].bones[1].PrevJoint.ToVector3(); 
    Vector3 dirFromShoulder = (indexKnucklePosition - shoulderPosition).normalized; 

    Debug.DrawRay(indexKnucklePosition, dirFromShoulder, Color.white); 

    Debug.DrawLine(shoulderPosition, indexKnucklePosition, Color.red); 
    } 
}