# Day 25 | 使用ManoMotion製作Flappy Bird遊戲 Part1 - 障礙物山 的移動與產生
###### tags: `Unity` `AR手遊`
> **目錄**
> 遊戲機制介紹
> 障礙物-山的移動
> 障礙物-山隨機產生
## 遊戲機制介紹
只要偵測到手部Grab的動作,帝江就會往上飛一點,如果偵測到連續動作,帝江就會飛越高,玩家要用Grab動作控制帝江不要撞到並且飛越山脈。
### 使用素材
| 帝江 | 山| 山|山|
| ---- | ---- | ---- |---- |
| || ||
## 障礙物-山的移動
### Step1 變數宣告
* rec 稍後用來改變物件canvas的位置
* speed 方便移動調整速度
```
RectTransform rec;
public float speed;
```
### Step2 函式宣告
在山的產生器再產生山以後,用來給山呼叫的set函式,設定山的初始位置以及旋轉。
* setRec(RectTransform setPoint) 讓生成器設定山的位置
* setRotation() 如果是上面的山,就旋轉z軸180度,並調整成上面山的位置。
```
public void setRec(RectTransform setPoint) {
rec = setPoint;
}
public void setRotation(){
rec.localEulerAngles = new Vector3(0f, 0f, 180.0f);
rec.anchoredPosition = new Vector3(2755, 440, 0);
}
```
### Step3 移動
* 山是往左邊移動所以是-x,- new Vector3( speed * TimedeltaTime,0,0)。
```
void Update(){
rec.position -= new Vector3(speed * Time.deltaTime, 0, 0);
}
```
以上就是山的移動,接下來是山的產生。
## 障礙物-山的隨機產生
時間到了就會產生新的山,所以需要計數器、山的物件、以及要產山生的點。
### Step1 變數宣告
* f_nextGenTime 作為計數器
* mountainPrefab 儲存要產生的山物件
* rec 儲存生成山的UI位置的依據
```
float f_nextGenTime = 3;
public GameObject[] mountainPrefab;
public RectTransform rec;
```
### Step2 判斷產生時間到了沒
先判斷計數器超過1了沒
* 如果超過了就Random出一個整數,選擇要產生的山。
* 將Random數作為參數丟進產生山的函式。
* 產山完就將計數器歸零。
* 如果計數器沒有超過1,就計數。
```
void Update()
{
if (f_nextGenTime > 1f)
{
int num = Random.Range(0, 3);
Generate(num);
num = Random.Range(0, 3);
GenerateAbove(num);
f_nextGenTime = 0;
}
else {
f_nextGenTime += Time.deltaTime;
}
}
```
### Step3 山的產生函式
* 將Random數作為參數,選擇要產山的3種山的mountainPrefab
* 利用Instantiate生成山,如果是下面的山就呼叫setRec(),如果是上面的山就呼叫set。
```
void Generate(int num) {
GameObject mountain = Instantiate(mountainPrefab[num]) as GameObject;
mountain.GetComponent<MountainMove>().setRec(rec);
mountain.transform.SetParent(GameObject.FindGameObjectWithTag("canvas").transform, false);
}
void GenerateAbove(int num){
GameObject mountain = Instantiate(mountainPrefab[num]) as GameObject;
mountain.GetComponent<MountainMove>().setRotation();
mountain.transform.SetParent(GameObject.FindGameObjectWithTag("canvas").transform, false);
}
```
---
以上就是障礙物-山的移動與產生,明天會寫到主角跳躍與手部偵測的部分,那就明天見囉~