---
# System prepended metadata

title: Day 26 | 使用ManoMotion製作Flappy Bird遊戲 Part2 - ManoMotion偵測Grab動作並往上飛
tags: [Unity, AR手遊, ManoMotion]

---

# Day 26 | 使用ManoMotion製作Flappy Bird遊戲 Part2 - ManoMotion偵測Grab動作並往上飛
###### tags: `Unity` `ManoMotion` `AR手遊`
上一篇已將障礙物山的建置與移動做好，今天要來做帝江的跳躍。

> **目錄**
> ManoMotion手部Grab動作偵測
> Grab觸發跳躍


## ManoMotion手部Grab動作偵測

### STEP 1 ManoMotionFrameUpdate 函式
宣告處理ManoMotion每個Frame更新函式，在裡面寫下Frame更新時要執行的動作。
* 宣告一個Gesture，從ManoMotionManager中取得的手部動作的資訊。
* 宣告一個Warning，取得ManoMotionManager在取得動作資訊時是否有出現錯誤。


```
void HandleManoMotionFrameUpdated(){
		GestureInfo gesture = ManomotionManager.Instance.Hand_infos[0].hand_info.gesture_info;
		Warning warning = ManomotionManager.Instance.Hand_infos[0].hand_info.warning;
		GestureTigger(gesture, warning);
}
```
### STEP 2 Gesturetrigger函式
宣告用來接收Trigger觸發的函示後，查找ManoGestureTrigger的列舉型別，找到待會會用到的Grab_GESTURE。
```
public enum ManoGestureTrigger
{
    NO_GESTURE = -1,
    CLICK = 1,
    GRAB_GESTURE = 4,
    DROP = 8,
    PICK = 7,
    RELEASE_GESTURE = 3
};
```
以FrameUpdate中的gesture 和 warning作為引數，如果Warning的值不是"找不到動作"，就繼續判斷接收到的動作，是否為我們要的"Grab"，一旦接受的了"Grab"，就執行往上飛函式Fly()。

```
void GestureTigger(GestureInfo gesture, Warning warning){
	if (warning != Warning.WARNING_HAND_NOT_FOUND)
	{
		if (gesture.mano_gesture_trigger == ManoGestureTrigger.GRAB_GESTURE)
		{
			fly();
		}
	}
}
```

最後在操作在腳本Start函式中，添加持續更新ManoMotion偵測的程式碼。

`ManomotionManager.OnManoMotionFrameProcessed += HandleManoMotionFrameUpdated;`


## 往上飛

在帝江掛上Rigidbody2D(因為是UI物件)，往上飛就是往正向y軸增加velocity，使用Velocity.up(相當於使用new Velocity2(0,1,0))來 * flyForce(向上施加的力)，可以依照自己想要飛的方式來調整數值大小，如果想要更符合物理，可以依照運動曲線作調整數值。

```
public void fly()
	{
		rigid.velocity = Vector2.up * flyForce;
	}
```


---
以上就是帝江版的Flappy Bird小遊戲系列，我們的各類小遊戲製作介紹就到這邊告一段落啦，明天要分享遊戲的對話與介面製作，那我們明天見囉!


