2014-11-22 142 views
0

我明白我可以在Unity3D遊戲中使用leapmotion。使用leapmotion來控制Unity3d界面

我看不到任何信息,是如果我可以用它來與資產的實際互動,模型等我打造的遊戲。例如圍繞x軸旋轉游戲對象或放大或縮小視圖。

這可能嗎?

回答

1

是的,這是可能的,但需要,沒有人還寫一些腳本(ASFAIK)。我對這個問題一直很好奇,這是我今天編寫的一個非常粗略的例子。

它所做的就是移動,縮放和旋轉選定的遊戲對象 - 它並不試圖做到這一點的一個好辦法 - 這只是一個概念證明。爲了使它工作,你必須做一個明智的轉換Leap座標和旋轉到Unity值。要嘗試它,請將此腳本放在名爲「編輯器」的文件夾中,在場景視圖中選擇一個遊戲對象,然後按住一個鍵,同時將您的手移至跳躍的上方。正如我所說的,這些動作都沒有真正用於編輯一個對象,但是你可以看到它可以用一些合理的邏輯。

@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)); 
    } 
}