Unity LeapMotion SDK 基礎講解
- LeapMation SDK 下載
- LeapMation Unity 示例場景 下載
- LeapMotion 組件決議
- LeapServiceProvider:
- HandModelManager:
- RiggedHand:
- HandEnableDisable:
- InteractionManager:
- InteractionHand:
- InteractionBehaviour:
- SimpleInteractionGlow:
- LeapMation 桌面基礎場景創建
- 場景搭建
- LeapMotion UI
- InteractionButton:
- Interaction Slider:
- InteractionToggle
- AttachmentHands:
- AttachmentHandEnableDisable:
- LeapMotion UI 場景演示:
- LeapMotion Anchor 錨點:
- Anchor :
- AnchorableBehaviour:
- AnchorGroup:
- LeapMotion Anchor 場景構建:
LeapMation SDK 下載
LeapMation 官方網址:鏈接: LeapMotion
LeapMotion SDK下載
LeapMotion SDK

控制器選擇

平臺選擇 下載之后解壓運行就行

LeapMation Unity 示例場景 下載
打開網址點擊下載 選擇Unity
LeapMation Unity

下載 LeapMotion SDK

同意就完事了

下載完之后進行解壓然后匯入到 Unity 里面
剩下的就是自己嘗試

LeapMotion 組件決議
暫時先決議桌面模塊 VR 模塊以后有機會再填充
以下模塊僅代表個人理解,若有不對的還請大佬即時斧正
LeapServiceProvider:
Edit Time Pose: 要執行的模式-----默認是桌面
Interactive volume visualization:識別范圍線框顯示模式
Frame Optimiza:框架優化
Physical Extrapolation:物理推斷
Tracking Optimization:跟蹤優化-----三個模式:桌面、 螢屏頂部 、 頭盔
Worker Thread Profiling:運行作業執行緒分析
Server Name Space:服務器名稱

HandModelManager:
Leap Provider: 控制器-----用來驅動已定義的模型池組中的手表示的控制器
Model Pool:模型池-----定義手部模型
Size:幾個手部模型
Rigged Hands:手控制器
Group Name: 當前手控制器名稱-----盡量不要有重復的不然會卡死(親測)
Left Model: 左手
Right Model:右手
Is Enabled: 手部模型是否顯示
Can Duplicate :是否可以復制-----這個就是在某個組件下需要勾選 不然就只能顯示一個手的模型

RiggedHand:
HandEnableDisable:
Handedness:偏向-----就是選擇這是那只手
Hand Model Palm Width:手掌寬度-----默認就行
Fingers:手指陣列-----需要按照 拇指、食指、中指、無名指、小指 的順序擺放
Palm: 手掌-----但是需要填充的是所有手指的根節點 也就是父物體
Forearm:前臂-----如果用不到就不用管
Wrist Joint:腕關節
Elbow Joint:肘關節
Deform Positions In Fingers:手指變形位置-----骨頭只存在于它們的根部,所以當把骨頭放在被追蹤的手上時,
最后一塊指尖骨頭的長度就會丟失,這個選項沿著X軸(長度軸)縮放最后一塊骨頭,
使其骨頭長度與跟蹤的骨頭長度相匹配,此選項僅在啟用手指變形位置時有效
Scale Late Finger Bones:-----通常是在手腕附近的手掌變換的3D軟體包,如果您的模型的掌紋變換位于掌紋的中心
類似于Leap API的手,則取消此選項,
Model Palm At Leap Wrist:-----如果每個手指在手掌和手指底部之間有一個額外的變換,則設定為True,
Joint List:模型關節陣列
Local Rotations:本地模型旋轉陣列
Local Positions:本地模型位置陣列
Modle Finger Pointing:模型手指指向
Model Palm Facing:模型掌心朝向
HandEnableDisable:就一個作用就是沒有識別到手部模型時隱藏

InteractionManager:
Hover Activation Radius:懸停激活半徑-----超過這個半徑,一個互動物件將不會從一個互動控制器接收懸停或主懸停回呼, 默認就行
Touch Activation Radius:觸摸激活半徑-----超過這個半徑,互動物件將不會被認為是接觸或抓取邏輯,在優化程序中,半徑應該較小
但一定不能小于互動控制器,也不能太緊地圍繞控制器,以便在快速移動時表現良好,這個值是由
互動管理器的lossyScale自動伸縮的,x,所以如果你希望玩家的手或控制器具有非單位縮放
建議將你的Interaction Manager與單位縮放放在“Player”Transform”下方,
Multi Grasp Holding Mode:多抓握模式-----如果設定為PreservePosePerController,當持有一個多抓取功能的物件并
使用單手或控制器釋放時,物件的保持姿態將調整為只反映剩下的保持控制器如果設定為
PreservePosePerController,當任何手或控制器釋放物件時,Remaininq控制器將重新
初始化他們的保持姿勢,以匹配物件最后保持的狀態,允許用戶更松散地旋轉和平移物件
PreservePosePerController是默認設定
Auto Generate Layers :自動生成層-----是否在場景運行時創建用于互動子,互動需要一個互動層(物件),一個掌握的物件層,
和一個接觸骨頭層(互動控制器“骨頭”碰撞器),保持這個檢查有這些層為你創建
T
emplate Layer:臨時層-----當自動生成時,互動層(用于可互動的物件)將使用與這里指定的層相同的物理碰撞標志,
Draw Controller Runtime Gizmos:繪制控制器運行時Gizmos

InteractionHand:
Leap Provider : LeapMotion控制器-----運行時自動匹配
Manager :LeapMotion管理-----運行時自動匹配
Hover Enabled :懸停啟用-----如果禁用,此互動控制器將不會用于生成懸停資訊或主要懸停資訊,
Contact Enabled :接觸啟用-----如果禁用,這個互動控制器將不會與互動物件發生碰撞,并且物件將不會接收到接觸回呼,
Grasping Enabled :抓握啟用-----如果禁用,則此互動控制器將無法使用抓握互動物件,
Hand Data Mode :選擇左右手模式
Primary Hover Fingertips:開啟的手指指尖-----用來抓取物體
Head Transform:頭物體-----可為空

InteractionBehaviour:
Manager :LeapMotion管理-----運行時自動匹配
Ignore Hover Mode:忽略懸停模式-----如果此模式被設定為除None之外的任何其他模式,則該物件將不接收來自
左控制器、右控制器或任一手控制器的回呼
Ignore Primary Hover:忽略主懸停-----如果選中此屬性,互動控制器將不能將此物件標記為其主要懸停,
主懸停需要啟用懸停才能起作用,但它可以在懸停后獨立禁用,
Ignore Contact:忽略接觸-----如果選中此屬性,互動控制器將無法觸摸該物件,
Ignore Grasping:忽略抓握-----如果選中此屬性,互動控制器將無法抓握此物件
Contact Force Mode:接觸力模式-----確定互動控制器應該對該物件施加多大的力,對于界面樣式的物件,如按鈕和滑塊
選擇Ul 模式,這將使物體感覺更輕,對溫和的觸摸更敏感;對于普通的物理物件,選擇 Object 模式,
Allow Multi Grasp:多抓握物件-----這個物件能被兩個或更多的互動控制器同時抓住嗎
Move Object When Grasped:抓住物件時移動物件-----當它被抓住時,互動控制器移動這個物體?
如果沒有選中此屬性,物件仍將接收抓取回呼,但您將需要通過腳本手動移動它們,
Grasped Movement Type:抓取的移動型別-----當物件被一個互動控制器持有時,
它應該如何移動到它的新位置非運動學體將與其他剛體碰撞,所以它們可能不會到達目標位置,
Override Interaction Layer:覆寫層互動-----設定為true,這個互動物件將覆寫其默認層的互動管理器的層設定,
互動層用于物體未被抓住且不忽略接觸時,
Override No Contact Layer:覆寫無接觸層-----如果設定為true,這個互動物件將覆寫其默認的無接觸層的互動管理器的層設定,
非接觸層不應與接觸骨層發生碰撞;它用于抓住互動物件或忽略接觸的情況,

SimpleInteractionGlow:
Use Hover:手部模型檢測-----如果啟用,當有手在附近時,物件將會傾斜到它的HoverColor
Use Primary Hover:主懸停檢測-----(主懸停只有一個 懸停可以有多個) 如果啟用,當InteractionHand的主懸停時
物件將使用它的PrimaryHoverColor,
Default Color:默認顏色
Suspended Color:暫停顏色-----就是手部模型突然丟失后的顏色
Hover Color:懸停顏色
Primary Hover Color:主懸停顏色
Pressed Color:按壓顏色

LeapMation 桌面基礎場景創建
場景搭建
1. Ctrl + N 新建一個場景 并創建一個空物體 更改名稱(我這里是Provider) 保存場景
2. 為Provider 添加 LeapServiceProvider 組件 默認設定就行
3. 創建新的空物體 重新命名(HandModelManager) 并為其添加 HandModelManager 組件 和設定相應值
兩個手部模型在 Assets/Plugins/LeapMotion/Core/Prefabs/HandModelsNonHuman 檔案夾下 里面的引數不用調節可以直接使用
4. 再次創建一個新的空物體 重新命名(InteractionManager)并為其添加 InteractionManager 組件 默認值就行
然后會有一個警告 這個警告的意思是:管理器沒有分配給它的互動控制器,請添加至少一個InteractionHand 或
InteractionVRController 作為該物件的子物件,
5. 為 InteractionManager 創建一個或則兩個子級空物件 并為其添加 InteractionHand組件 默認值就行
6. 如果上述都沒有問題的話 就把 MainCamera 移動到合適的位置 不然影像會很小
7. 整體查看是否出現遺漏 然后運行測驗


HandModelManager 細節引數

手部模型位置


InteractionManager 子級組件添加

InteractionManager 警告修復效果

Camera 建議位置

整體場景結構

LeapMotion UI
InteractionButton:
Manager :LeapMotion管理-----運行時自動匹配
Ignore Hover Mode:忽略懸停模式-----如果此模式被設定為除None之外的任何其他模式,則該物件將不接收來自
左控制器、右控制器或任一手控制器的回呼
Ignore Primary Hover:忽略主懸停-----如果選中此屬性,互動控制器將不能將此物件標記為其主要懸停,
主懸停需要啟用懸停才能起作用,但它可以在懸停后獨立禁用,
Ignore Contact:忽略接觸-----如果選中此屬性,互動控制器將無法觸摸該物件,
Ignore Grasping:忽略抓握-----如果選中此屬性,互動控制器將無法抓握此物件
Override Interaction Layer:覆寫層----- 如果勾選就設定為 Interaction Layer 所選擇的層
Interaction Layer: 互動層-----可互動的層級
Override No Contact Layer:覆寫無接觸層 -----默認為 False 如果勾選就設定為 No Contact Layer 所選擇的層
No Contact Layer:沒有接觸層------可互動的層級
Control Enabled:控制啟用-----當設定為false時,該Ul控制元件將不起作用,當你想要禁用用戶影響Ul控制元件的能力,
同時保持游戲物件處于活動狀態,例如,渲染,并能夠接收primaryHover狀態時,使用這個而不是禁用組件本身,
Starting Position Mode:起始位置模式----- 有兩種模式 一種是按下 一種是抬起 默認是抬起
Min Max Height:最小最大高度-----按鈕可以存在的最小和最大高度
Resting Height:靜止高度----- 是個0 - 1的值 這個按鈕停留的高度;這個值介于最小和最大高度之間
Spring Force:彈力-----是個0 - 1的值 值越大 反饋越快
On Press:按下-----事件呼叫 按下必須要完全按下才會觸發
On Unpress:松開-----事件呼叫 抬起只要按下之后抬起一點就會觸發

Interaction Slider:
因為 Interaction Slider 和 Interaction Button 屬性很相似 所以就直接寫那些不同的屬性了
紅線框選到的部分就和 Interaction Button屬性一樣 下面重點描述不一樣的屬性

Slider Sttings
Slider Type:滑動條層級-----一共有三種模式 水平滑動、垂直滑動、平面滑動
Dispath Slider Value On Start:調度滑塊的值在開始的時候發送 -----就是一開始的時候就呼叫一下滑動條事件
Default Horzontal Value:初始水平位置-----因為 Horzontal Value Range 最大值是 1 所以 0.5 表示 水平/垂直 居中
Horzontal Value Range:滑塊在水平軸上的最小值和最大值
Horzontal Slider Limits:水平滑動限制-----更改這個向量可以在Scene 視窗看到更改變化
Horzontal Steps:水平步數-----類似于UI的 步數控制 就是當前滑動條可以分為幾步 有點像刻度
Vertical Slider Event:事件觸發器
水平模式屬性同上

調節出來的效果 Scene場景

InteractionToggle
這個更簡單 無論是搭載 還是實體化 都和上面的兩個一樣 就兩個屬性 看一看吧
Is Toggle: IsOn-----就是UI 里面的 IsOn
Star Toggle: 開始的時候執行一下事件
下面那兩個就是事件觸發

AttachmentHands:
添加 AttachmentHands 組件
這個組件的主要作用是 追蹤手部關節位置
上面的手部關節 勾選后才可以正確追蹤到位置 沒有勾選的話不會追蹤

添加 AttachmentHands 組件之后會默認生成兩個子級并附帶上 添加 AttachmentHand 組件
來確認是哪個手部控制元件

然后 Attachment Hand (Left)/Attachment Hand (Right) 根據 AttachmentHands組件又會添加其他的子級
并為子級添加上 AttachmentPointBehaviour 組件 來確認是哪個手部關節

然后 Attachment Hand (Left)/Attachment Hand (Right) 根據 AttachmentHands組件又會添加其他的子級
并為子級添加上 AttachmentPointBehaviour 組件 來確認是哪個手部關節

AttachmentHandEnableDisable:
這個組件就是當沒有檢測到手部模型的時候 隱藏相應的手部模型
Attachment Hand:手部支持部件 左手或者右手

Hierarchy面板 層級 詳細資訊 以及 簡單的關節追蹤應用

LeapMotion UI 場景演示:
說一下我創建的步驟:
1. 創建一個空物體 并添加 InteractionButton 組件
2. 點擊下面 圖A 的那幾個按鈕 按完之后會自動創建一個父級 父級的名字就是 ***Base
3. 然后就剩下了 圖B 的警告 這個警告的意思是:這個互動物件沒有碰撞器,沒有任何碰撞器的互動物件不能互動,
什么意思呢 就是需要一個碰撞器 自身也可以子級也可以 看你自己的需求(反正我是創建的子級)
4. 創建一個Cube 作為子級碰撞
5. 創建一個空物體 并添加 InteractionSlider 組件
6. 創建流程同 InteractionButton 一樣 值得話根據自己的情況調節 也可以和我一下 如圖C
7. 創建一個空物體 并添加 InteractionToggle 組件
8. 創建流程同 InteractionButton 一樣 值得話默認就是 可以添加自己的事件 來進行測驗
9. 創建一個空物體 并添加 AttachmentHands 關節追蹤 組件
10. 并添加自己想要實作的效果 我就直接借用 Hand UI 場景里面的控制元件了
11. 運行測驗
如果想要實作更多的應用 就發揮你的想想吧
圖A
圖B

腳本搭載:默認就行 想要修改 就看上面的具體資訊

腳本搭載:SLider 我的值 如果不明白的話 就看上面的具體資訊

腳本搭載:Toggle 默認就行 更改看上面引數資訊

AttachmentHands 關節追蹤腳本搭載詳細資訊

HandUI Scene場景位置

Hierarchy面板 層級 最終詳細資訊 以及 搭載情況

LeapMotion Anchor 錨點:
Anchor :
Allow Mutiple Objects:允許多種物件------這個錨點是否允許多個物件同時連接到它
此屬性由AnchorGroups和anchorablebehaviour強制執行,
Match Active State With Attached Objects:將活動狀態與附加物件匹配
當它自己的活動狀態改變時,這個錨是否應該嘗試啟用和禁用附加的
anchorablebehaviour的GameObjects 如果這個設定是啟用的,
當它自己的游戲物件被禁用或它的腳本被禁用時,錨將停用附加的物件,
同樣的,成為激活或啟用
Add New Event Type:添加新的事件型別
On Anchor Preferred:進入錨點吸附范圍 觸發
On Anchor Not Preferred:退出錨點吸附范圍 觸發
While Anchor Preferred:被吸附物體只要在錨點吸附范圍內 每一幀都會觸發(試了一下好像只要開啟符不符合條件都會持續觸發)
On Anchorables Attached:被吸附物體 在吸附錨點上 觸發
On No Anchorables Attached :被吸附物體 從吸附錨點退出 觸發
While Anchorables Attached:當錨點于物件連接 被吸附物體于錨點進行連接 每一幀都會觸發
(試了一下好像只要開啟符不符合條件都會持續觸發)

AnchorableBehaviour:
Attach Object :錨點鏈接------基于Anchor Group
Detach Object :錨點分離------基于Anchor Group
Move Object To Anchor:移動到錨點位置------基于Anchor
Is Attached:錨點是否連接
Anchor:錨點
Anchor Group:錨點支持組
Max Anchor Range:最大錨點吸附范圍------超出此范圍的錨被忽略為該物件的可能錨
Use Trajectory:使用軌跡------只有當一個InteractionBehaviour附加到這個物件時才允許,如果啟用,則該物件的
Attach 方法或其變體將在尋找要附著的錨時衡量其向錨的速度及其接近程度
Motionless Range Fraction:停止錨點范圍------當啟用了Use Trajectory,但物件試圖尋找沒有任何速度的錨點時
使用的最大錨點范圍的值
Max Motionless Range :最大停止范圍
Max Attachment Angle:最大鏈接角度------這個物體的軌跡可以遠離一個錨點的最大角度,可以將它視為一個可以附著的錨點
Always Attach Distance:錨點系結距離------如果在這段距離內有一個錨,無論軌跡如何,都要固定住,
Lock To Ancher:是否鎖定Ancher------物體應該立即移動到錨點位置嗎 如果勾選就是立即過去 中間沒有過渡影片
Lock When Attached:錨點鎖定------物體一開始應該平穩地移動到錨點,但一旦到達錨點就鎖定它嗎
注意:禁用AnchorableBehaviour將阻止物件向它的錨點移動,并將從錨點“釋放”它
這樣當重新啟用時,物件將平滑地再次移動到錨點
Match Anchor Motion While Attached:當附加時匹配錨運動------當這個物體平穩地向它的錨移動時,如果錨不是靜止的,
它是否也應該繼承錨本身的運動?否則,錨可能會從這個AnchorableBehaviour運行,
并阻止它真正到達錨,
Anchor Lerp Coeff Per Sec:物體向目標位置移動的速度應該是多少?值越高,速度越快,
Anchor Rotation:錨點旋轉鎖定------物件是否也應該旋轉以匹配錨點的旋轉?如果勾選此項,
應用于錨點轉換方式的運動設定也將應用于錨點旋轉方式,
Try Anchor Nearest On Grasp End:試在最近的抓握端拋錨------當抓取結束時,AnchorableBehaviour是否應該自動嘗試
錨定自己?如果啟用了useTrajectory,該物件將自動嘗試
連接到其軌跡方向上最近的有效錨上,否則將簡單地嘗試連
接到最近的有效錨上,
Is Attached By Hand:手部監控-------當用戶的手在附近時,物體是否應該離開錨點并向用戶的手方向移動?

AnchorGroup:
Anchors:錨點組------意思就是如果 AnchorableBehaviour 組件的AnchorGroup條件指定當前錨點組就是
搭載AnchorableBehaviour的物體無法吸附除了當前AnchorGroup 以外的其他物體

LeapMotion Anchor 場景構建:
1. 復制一份 LeapMation 桌面基礎場景 并更改場景名稱為 LeapMotion_Anchor
2. 新建一個空物體并置零 更改名稱為 AttachmentHands 為其添加AttachmentHands、AttachmentHandEnableDisable
(兩個因為需要左右兩個手)組件
3. 把 AttachmentHandEnableDisable 的Attachment Hand 屬性進行填充
4. 打開 Anchor 場景 并把 Left Hand Palm Anchor Base 和 Prism拉成預制體
5. 把 Left Hand Palm Anchor Base預制體放在 AttachmentHands\Attachment Hand (Left)\Palm下面
6. 新建三個空物體并置零 命名為 Magenta Anchor Group、Red Anchor Group、Blue Anchor Group并為其添加
AnchorGroup組件,添加錨點陣列資料 一一對應相應的值
7. 新建三個空物體 更改初始位置 命名為 Anchorable Object (Magenta)、Anchorable Object (Red)、
Anchorable Object (Blue)并把 Prism 預制體作為子級放置
位置引數分別為(-0.2,0.285,0.141)(0,0.285,0.141)(0.2,0.285,0.141)
8. 為Anchorable Object (Magenta)添加InteractionBehaviour和AnchorableBehaviour組件
9. 查看結構,并運行測驗
AttachmentHands 組件資訊引數

Anchors 場景:把Left Hand Palm Anchor Base和Prism 拉成預制體

Left Hand Palm Anchor Base 預制體 放置位置


Anchor Group 組屬性添加 需要添加對應的 Anchor 錨點

Anchorable Object 三個物體:位置引數 組件添加


Anchorable Object 物體:Prism 預制體放置

整體結構 僅供參考

暫時先這樣吧,如果有時間的話就會更新,實在看不明白就留言,看到我會回復的,
路漫漫其修遠兮,與君共勉,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/286843.html
標籤:其他
上一篇:POJ2749 題解
下一篇:Unity初學者學習路線與建議
