使用leapmotion控制Unity3d界面

使用leapmotion控制Unity3d界面,unity3d,leap-motion,Unity3d,Leap Motion,我知道我可以在Unity3D游戏中使用leapmotion 我看不到任何信息的是,我是否可以在构建游戏时使用它与资产、模型等进行实际交互。例如,围绕x轴旋转游戏对象或放大或缩小视图 这可能吗 是的,这是可能的,但需要一些还没有人编写的脚本(ASFAIK)。这是一个非常粗略的例子,因为我今天也对这个问题很好奇 它所做的只是移动、缩放和旋转一个选定的游戏对象——它并没有试图以一种好的方式做到这一点——它只是一个概念证明。要使其工作,您必须将跳跃坐标和旋转合理地转换为单位值。若要尝试,请将此脚本放在名

我知道我可以在Unity3D游戏中使用leapmotion

我看不到任何信息的是,我是否可以在构建游戏时使用它与资产、模型等进行实际交互。例如,围绕x轴旋转游戏对象或放大或缩小视图


这可能吗

是的,这是可能的,但需要一些还没有人编写的脚本(ASFAIK)。这是一个非常粗略的例子,因为我今天也对这个问题很好奇

它所做的只是移动、缩放和旋转一个选定的游戏对象——它并没有试图以一种好的方式做到这一点——它只是一个概念证明。要使其工作,您必须将跳跃坐标和旋转合理地转换为单位值。若要尝试,请将此脚本放在名为“编辑器”的文件夹中,在场景视图中选择一个游戏对象,并按住一个键,同时将手移到跳跃上方。正如我所说的,这些动作都不能真正用于编辑对象,但您可以看到,通过一些合理的逻辑,这是可能的

@CustomEditor (Transform)
class RotationHandleJS extends Editor {
    var controller = new Leap.Controller();
    var position;
    var localScale;
    var localRotation;
    var active = false;
    function OnSceneGUI () {
        e = Event.current;
        switch (e.type) {
            case EventType.KeyDown:
                position = target.transform.position;
                localScale = target.transform.localScale;
                localRotation = target.transform.localRotation;
                active = true;
                Debug.Log("editing");
                break;
            case EventType.KeyUp:
                active = false;
                target.transform.position = position;
                target.transform.localScale = localScale;
                EditorUtility.SetDirty (target);
                break;
        } 
        if(active){
            frame = controller.Frame();
            ten = controller.Frame(10);
            scale = frame.ScaleFactor(ten);
            translate = frame.Translation(ten);
            target.transform.localScale = localScale + new Vector3(scale, scale, scale);
            target.transform.position = position + new Vector3(translate.x, translate.y, translate.z);
            leapRot = frame.RotationMatrix(ten);
            quats = convertRotation(leapRot);
            target.transform.localRotation = quats;
        }
    }

    var LEAP_UP = new Leap.Vector(0, 1, 0);
    var LEAP_FORWARD = new Leap.Vector(0, 0, -1);
    var LEAP_ORIGIN = new Leap.Vector(0, 0, 0);

    function convertRotation(matrix:Leap.Matrix) {
      var up = matrix.TransformDirection(LEAP_UP);
      var forward = matrix.TransformDirection(LEAP_FORWARD);

      return Quaternion.LookRotation(new Vector3(forward.x, forward.y,forward.z), new Vector3(up.x, up.y, up.z));
    }
}