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);

}


以上就是障碍物-山的移动与产生,明天会写到主角跳跃与手部侦测的部分,那就明天见罗~


<<:  Android Studio初学笔记-Day24-FloatButton和SnackBar

>>:  图的深度广度检查 - DAY 25

浅谈人机结合

人的科技文明发展始终来自於人性 在现今的科技与资讯发达的社会,人手一机已不再是奢望,连小小年纪的小朋...

JS Truthy 与 Falsy DAY55

MDN: https://developer.mozilla.org/zh-CN/docs/Glos...

没有备份line的聊天记录,应该如何恢复?

假如你在 iPhone 和 Android 上恢复丢失的 LINE 对话,救援过程将使用一套数据恢复...

[区块链&DAPP介绍 Day19] contract 案例1 - 抢红包

接下来几天会来模拟一下,实际合约的案例,来更深入了解一下 solidity 语法 首先我们先设定一个...

CISSP考试资源

CISSP快速启动版(建议之最低要求) https://wentzwu.com/cissp-expr...