Leapmotion asset package包括在windows環境中使用leapmotion設備的插件。這個工具包包括了手的預製件,腳本和一些演示場景。
從leap motion asset package下載leap motion asset package。
需要注意,開發包unity4.0以上版本僅適用於windows系統,並需要orion beta服務。更早版本可用於mac和windows,但是需要2.3版本的leapmotion服務。你不能將orion中的元素和早期資源開發包混用,他們不兼容。
創建一個項目
首先,創建一個unity項目:
1.打開unity。
2.選擇File>New Project。
3.輸入名字選擇保存地址。
4.點擊Create Project。
然後導入Leap Motion asset package到項目中。
1.下載資源包。
2.選擇Assets>Import Pacakage>Custom Package
3.找到你下載的資源包的位置點擊Open。
如果項目已經包含了leap motion assets,你需要刪除舊的(項目備份)再導入新的。unity導入過程僅僅是加入新的文件並且覆蓋已更改的文件。他不會移除廢除的文件(有時候會創建已存在文件的副本而不是覆蓋它)
導入模塊
關於orion(是一種開發套件),我們已經把unity資源分成一個由可選模塊支持的核心包。核心包可以用來進行手勢追蹤,但是你只需要其中包含你想要特徵的模塊。這些模塊不依賴於彼此是獨立的。當前可用的模塊包括:
1.attachment-提供unity手模型,這個模型可以用手上的多個部位去碰觸遊戲物體。
2.hands-提供另外的圖形手模型和一些使用3d手模型的工具。
3.interaction engine-提供一些手和虛擬3d物體交互時的物理特性,以及一些可擴展的機制用於特定物體和場景的交互。
4.UI input-讓手能控制一些標準的unity ui元素
5.detection example-提供一些使用檢測特徵的樣例,這也是核心資源包的一部分。這個模塊不會添加新的特徵(儘管有些腳本案例很有用。)
導入模塊和之前導入leapmotion資源包一樣。
在VR場景中添加手
用LMHeadMountedRig替代場景中多有存在的相機設備。
把LMHeadMountedRig預製件放在使用者的初始視角處。場景中的手的位置要和你真實的手和leapmotion的位置相一致。
在場景中增加一個手。
1.移除已存在的相機或相機裝置。
2.把預製件拖進場景的hierachy中。
3.確定預製件的位置。像任何的VR相機一樣,這個位置和角度將成爲場景的初試視角。
4.添加手的模型到Hand Pool中。在LeapHandController插件裏。
a.在hierarchy中選擇LeapHandController。
b.設置hand pool的模型池數量爲2。池中將會創建兩個元素。
c.將一個元素命名爲“gfx_hands”。
d.拖動想要的手的預設到左和右屬性中。
e.勾選is enabled和can duplicate兩個選項。
f.重複第二個元素,使用物理手預設。
你可以直接在hand pool中使用預設,也可以首先把手模型放到場景hierarchy中。如果你把手模型放到了場景中,注意,我們就不推薦把模型作爲leaphandcontroller的子模型了。這個模塊需要從相機層出去,否則會閃爍在頭部移動的時候。
5.運行場景
你應該看到手出現在game視窗中,當你把手放在leapmotion設備上。如果沒有看到手,打開leapmotion觀察器確定你的設備和電腦連接好了可以傳送追蹤數據。如果unity中的手出了場景,你可以暫停game用scene視窗去定位他們。
在desktop場景中加入手
把leaphandcontroller預製件放在你想要手出現的地點下方。手被放在場景中的位置要參考現實中手和leapmotion的相對位置。你可以改變手移動比例設置,這樣就可以讓手可以移動更大的範圍。
把手加入到場景中:
1.在文件菜單中,找到leaphandcontroller預設。Assets/LeapMotion/Prefabs
2.把leapHandController拖到場景視窗中。
3.把預設放在你想要的位置。如果要看手,LeapHandController要在相機視野內。
4.創建一個空物體命名爲“HandModels”。這個物體應該和LeapHandController同級而不是作爲他的子物體。
5.把想要的手預設拖入HandModels物體中。你需要左右兩個預設分別代表左右手,而且需要至少兩個集合:一個作爲視覺顯示,另一個用作unity物理交互。你可以擁有隨便幾個集合。
6.在hierarchy中選擇LeapHandController
7.把HandModels物體拖到LeapHandController的hand pool插件中的ModelsParent中。
8.設置hand pool的值爲2,創建了兩個元素。
9.其中一個元素命名爲“gfx_hands”
10.HandModels物體中的圖形手模型到左右手模型屬性中。
11.設Is Enable和Can Duplicate爲真。
12.對第二個屬性做一樣的操作,使用物理手預設。你可以在hand pool中直接使用預設。
注意:capsulehand預設只能1:1比例。
13.運行場景。
使用leapmotion接口
除了資源包中的預設和腳本。你可以寫你自己的腳本來使用從leapmotion接口追蹤到的數據。leapmotion類被定義爲Leap命名空間。一個基礎類MonoBehavior,他可以使用leapmotion接口。下面有個例子。這個腳本移動物體到左手掌下方)
using UnityEngine;
using System.Collections.Generic;
using Leap;
public class LeapBehavior : MonoBehaviour {
LeapProvider provider;
void Start ()
{
provider = FindObjectOfType<LeapProvider>() as LeapProvider;
}
void Update ()
{
Frame frame = provider.CurrentFrame;
foreach (Hand hand in frame.Hands)
{
if (hand.IsLeft)
{
transform.position = hand.PalmPosition.ToVector3() +
hand.PalmNormal.ToVector3() *
(transform.localScale.y * .5f + .02f);
transform.rotation = hand.Basis.Rotation();
}
}
}
}
這個腳本,LeapUnityExtensions.cs在Assets/LeapMotion/Scripts/utils中。提供了有幫助的擴展功能將leapmotion中的矩陣向量轉化到unity接口中。上面用到函數ToVector3()和Rotation()在腳本中被定義。
(上面的代碼是直接複製官網的,運行的時候發現還要加using Leap.Unity;並且rotation那一句會出現錯誤,等以後解決了再來更新這篇。)
注意:在大多數情況中,你需要從場景的leapprovider物體中獲得Frame object。LeapmotionProvider將幀數據轉化爲適合參考系,如果你從leap中獲得一幀。控制對象,這個數據將依然在leapmotion的參考系中而不能和場景中的手匹配。