我正在尝试在我的 Unity 项目中使用跳跃动作实现类似于 HTC Vive 控制器的功能。我想用食指生成一个激光指示器,然后将 Vive 的房间传送到激光的位置(就像使用控制器完成的那样)。问题是最新的跳跃运动(猎户座)文档,目前尚不清楚。任何想法如何做到这一点?更一般地说,我们考虑过使用 HandController,但我们不知道在哪里添加脚本组件。谢谢!
问问题
779 次
1 回答
1
我不清楚您遇到的问题是在场景中获取手部数据,还是使用该手部数据。
如果您只是想在场景中获取手数据,您可以从 Unity SDK 的示例场景之一复制预制件。如果您尝试将 Leap 集成到已经设置了 VR 装备的现有场景中,请查看核心 Leap 组件的文档,以了解需要准备哪些部分才能开始获取手部数据。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);
}
}
于 2017-07-09T19:29:10.857 回答