我尝试使用Unity项目上的跳跃动作实现类似于HTC Vive控制器的功能。我想用食指生成一个激光指示器,并将Vive的房间传送到激光器的位置(就像它完成了控制器一样)。问题是最新的跳跃动作(猎户座)文档,目前还不清楚。任何想法如何做到这一点?更一般地说,我们考虑使用HandController,但我们不了解添加脚本组件的位置。 谢谢!
答案 0 :(得分:0)
我不清楚你所遇到的问题是你的场景中是否有手数据,或是使用手数据。
如果您只是想在场景中获取手部数据,可以从Unity SDK的一个示例场景中复制预制件。如果您正在尝试将Leap集成到已经设置VR装备的现有场景中,请查看the core Leap components上的文档,以了解需要哪些部分才能开始获取Hand数据。 LeapServiceProvider 必须位于场景中的某个位置才能接收手数据。
只要您在某处有LeapServiceProvider,就可以从任何脚本,任何地方访问Leap Motion。因此,要从索引指尖获取光线,只需将此脚本弹出任何旧位置:
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);
}
}
对于它的价值,索引指尖方向可能不会足够稳定,无法做到你想要的。一个更可靠的策略是从相机(或理论上的“肩部位置”,从相机的恒定偏移)投射一条线穿过手的指关节骨头:
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);
}
}