iT邦幫忙

2021 iThome 鐵人賽

DAY 25
0
Mobile Development

從無到有! Unity AR手遊開發日誌-以山海異聞錄為例系列 第 25

Day 25 | 使用ManoMotion製作Flappy Bird遊戲 Part1 - 障礙物山的移動與產生

今天要介紹最後一個小遊戲,讓我們開始吧!

目錄
遊戲機制介紹
障礙物-山的移動
障礙物-山隨機產生

遊戲機制介紹

只要偵測到手部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);

}


以上就是障礙物-山的移動與產生,明天會寫到主角跳躍與手部偵測的部分,那就明天見囉~


上一篇
Day 24 | 使用ManoMotion製作打地鼠遊戲Part2 - 遊戲管理
下一篇
Day 26 | 使用ManoMotion製作Flappy Bird遊戲 Part2 - ManoMotion偵測Grab動作並往上飛
系列文
從無到有! Unity AR手遊開發日誌-以山海異聞錄為例30

尚未有邦友留言

立即登入留言