leapmotion文檔(3):創建一個unity3d項目

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的參考系中而不能和場景中的手匹配。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章