我正在设置一个新项目,该项目打算同时部署到HoloLens 1和2,并且我想在两者中都使用手射线,或者至少能够在HoloLens 1上模拟它们以准备HoloLens 2。
据我所知:
它可以显示并响应编辑器和设备中的单击,但是它不使用手形坐标,而是从0,0,0向前进行射线广播,这表明GGV手形控制器正在提供GripPosition(当然由于HL1而没有旋转,但是没有提供“指针姿势”。
我想做到这一点的最干净的方法是向GGV Hand控制器添加一个指针姿势,或者向GripPosition添加(估计)旋转并将其用作ShellHandRayPointer中的Pose Action。我无法立即看到在MRTK中自定义/插入位置。
或者,我可以自定义DefaultControllerPointer预制件,但是由于MRTK似乎仍在频繁更改,因此我很犹豫,这可能会导致升级麻烦。
答案 0 :(得分:0)
您可以创建一个自定义指针,该指针将根据手的位置来推断指针的旋转,然后像您建议的那样,对姿势操作使用Grip Pose
而不是Pointer Pose
。
自定义指针的代码如下所示:
// Note you could extend ShellHandRayPointer if you wanted the beam bending,
// however configuring that pointer requires careful setup of asset.
public class HL1HandRay : LinePointer
{
public override Quaternion Rotation
{
get
{
// Set rotation to be line from head to head, rotated a bit
float sign = Controller.ControllerHandedness == Handedness.Right ? -1f : 1f;
return Quaternion.Euler(0, sign * 35, 0) * Quaternion.LookRotation(Position - CameraCache.Main.transform.position, Vector3.up);
}
}
// We cannot use the base IsInteractionEnabled
// Because HL1 hands are always set to have their "IsInPointing pose" field as false
// You may want to do more thorough checks here, following BaseControllerPointer implementation
public override bool IsInteractionEnabled => IsFocusLocked || IsTracked;
}
然后创建一个新的指针预制件,并将您的指针配置文件配置为使用新的指针预制件。创建自己的预制件而不是修改MRTK预制件具有确保MRTK更新不会覆盖您的预制件的优势。
以下是我为进行简单的指针预制而进行的一些捕获,以突出显示相关更改进行测试:
然后是我使用的组件: