Flapper Bird的学习笔记(二)

时间:2023-03-09 06:49:17
Flapper Bird的学习笔记(二)

因为有一个超屌的梦想,所以就绝不会做一个孬种的追梦人!

本章节主要目的:

  • 实现小鸟的飞行。
  • 实现管道的随机出现。
  • 实现相机跟随。

上次主要是场景的布置,这节全力拿下代码。

1.小鸟飞行(一种制作2D动画的小技巧,shader的理解和掌握)

首先看到的是一张包含三张不同状态的小鸟图片,我们需要做的是把这三张不同状态的小鸟组合成一组动图,实现小鸟飞行的效果。

Flapper Bird的学习笔记(二)

打开开始创建的小鸟材质球,会看到里面的Shader属性,更改属性值后会但长度显示其中的一部分。通过调节Tilling和offset值达到预期效果,这个也可以自己试着改一下值,看一下效果。图中0.3333是为了达到1/3图片的效果,然后再通过代码实现小鸟飞行。(见证奇迹的时候到了,呵 呵~)

Flapper Bird的学习笔记(二)

  

 public float timer = 0;    //定义计时变量
public int frameNumber = 10; //每秒的次数
public int frameCount = 0; // 计数变量
 timer += Time.deltaTime;      //
if (timer >= 1.0f / frameNumber)
{
int frameIndex = frameCount % 3; //索引到第几部分 小鸟图片分为三部分,0,1,2
frameCount++;
timer -= 1.0f / frameNumber; //没生成一个小鸟动作,重置时间 this.GetComponent<Renderer>().material.SetTextureOffset("_MainTex", new Vector2(0.3333f * frameIndex, 0)); //获取该部分小鸟图片,达到小鸟飞行的效果
}

2. 管道的随机生成

为了达到游戏可玩性效果,实现管道随机生成。在管道随机生成的过程中,由于管道的数量在整个相机现实的界面中生成多对,我们采用预制的方式有效提高效率。代码如下:

public void RandomGeneratePosition()
{
float pos_y = Random.Range(-0.4f, -0.1f);//主要用随机函数获取Y的值,达到管道出现参差不齐的效果。
this.transform.localPosition = new Vector3(this.transform.localPosition.x, pos_y, this.transform.localPosition.z);
}

这里如果有些关键字不理解可以查Unity圣典

3. 背景图片的循环

这一部分是通过在第二个背景图片中间一点的地方设置触发器(保证小鸟能够水平移动时能够和触发器有交互),再设置一对象作为基础点,然后在其X坐标的基础上加上背景图片的宽度,以达到场景延伸的效果。具体效果代码:

public Transform CurrentBg;
public Pipe pipe1;
public Pipe pipe2;
 public void OnTriggerEnter(Collider other)
{
if (other.tag == "Player")
{
Transform firstBg= GameMaanager._intance.firstBg;
CurrentBg.position = new Vector3(firstBg.position.x + 10, CurrentBg.position.y, CurrentBg.position.z);
GameMaanager._intance.firstBg = CurrentBg; pipe1.RandomGeneratePosition();
pipe2.RandomGeneratePosition();
}
}

这里要提到触发器的几个方法OnTriggerEnter()、OnTriggerStay()、OnTriggerExit(),分别是进入、停留、离开触发器。具体操作可以再Unity圣典的脚本手册中查阅。

以上是这次的代码实现过程,虽然很简单,对于初次接触或是不熟练语法的菜鸟还是挺管用的。就我个人而言,这节不光是对本游戏的代码记忆和理解,还应该有自己的见解和延伸,这样才能达到学习的效果。

愿你我在每一个晚上都能拥抱梦想入睡。晚安,好梦!