2014-11-22 3 views
0

Unity3D에서 게임에서 leapmotion을 사용할 수 있다는 것을 알고 있습니다.leapmotion을 사용하여 Unity3d 인터페이스 제어

내가 정보를 볼 수없는 것은 내가 게임을 제작할 때 실제 자산, 모델 등과 상호 작용할 수 있는지 여부입니다. 예를 들어 x 축을 중심으로 게임 객체를 회전하거나 뷰를 확대 또는 축소합니다.

이것이 가능합니까?

답변

1

예, 가능하지만 아무도 아직 작성하지 않은 스크립트가 필요합니다 (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)); 
    } 
}