0
我明白我可以在Unity3D遊戲中使用leapmotion。使用leapmotion來控制Unity3d界面
我看不到任何信息,是如果我可以用它來與資產的實際互動,模型等我打造的遊戲。例如圍繞x軸旋轉游戲對象或放大或縮小視圖。
這可能嗎?
我明白我可以在Unity3D遊戲中使用leapmotion。使用leapmotion來控制Unity3d界面
我看不到任何信息,是如果我可以用它來與資產的實際互動,模型等我打造的遊戲。例如圍繞x軸旋轉游戲對象或放大或縮小視圖。
這可能嗎?
是的,這是可能的,但需要,沒有人還寫一些腳本(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));
}
}