Unity3D에서 게임에서 leapmotion을 사용할 수 있다는 것을 알고 있습니다.leapmotion을 사용하여 Unity3d 인터페이스 제어
내가 정보를 볼 수없는 것은 내가 게임을 제작할 때 실제 자산, 모델 등과 상호 작용할 수 있는지 여부입니다. 예를 들어 x 축을 중심으로 게임 객체를 회전하거나 뷰를 확대 또는 축소합니다.
이것이 가능합니까?
Unity3D에서 게임에서 leapmotion을 사용할 수 있다는 것을 알고 있습니다.leapmotion을 사용하여 Unity3d 인터페이스 제어
내가 정보를 볼 수없는 것은 내가 게임을 제작할 때 실제 자산, 모델 등과 상호 작용할 수 있는지 여부입니다. 예를 들어 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));
}
}