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

本章节主要目的:

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

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

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

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

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

  

 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圣典的脚本手册中查阅。

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

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

Flapper Bird的学习笔记(二)的更多相关文章

  1. Flapper Bird的学习笔记(一)

    因为我有一个超屌的梦想,所以就绝不做孬种的追梦人! 本文主要目的是为了实现Flapper Bird的功能. 另外一个目的是为了加强对Unity引擎的理解和掌握. 新人一枚,如若看到是我幸运.若是发现错 ...

  2. Flapper Bird的学习笔记(三)

    因为我有一个超屌的梦想,所以就绝不会做一个孬种的追梦人! 完成音效的添加 单例模式 游戏的状态切换 1. 单例模式 首先呢,说一下单例模式.何为单例?单例模式是一种常用的软件设计模式.在它的核心结构中 ...

  3. WPF的Binding学习笔记(二)

    原文: http://www.cnblogs.com/pasoraku/archive/2012/10/25/2738428.htmlWPF的Binding学习笔记(二) 上次学了点点Binding的 ...

  4. AJax 学习笔记二(onreadystatechange的作用)

    AJax 学习笔记二(onreadystatechange的作用) 当发送一个请求后,客户端无法确定什么时候会完成这个请求,所以需要用事件机制来捕获请求的状态XMLHttpRequest对象提供了on ...

  5. [Firefly引擎][学习笔记二][已完结]卡牌游戏开发模型的设计

    源地址:http://bbs.9miao.com/thread-44603-1-1.html 在此补充一下Socket的验证机制:socket登陆验证.会采用session会话超时的机制做心跳接口验证 ...

  6. JMX学习笔记(二)-Notification

    Notification通知,也可理解为消息,有通知,必然有发送通知的广播,JMX这里采用了一种订阅的方式,类似于观察者模式,注册一个观察者到广播里,当有通知时,广播通过调用观察者,逐一通知. 这里写 ...

  7. java之jvm学习笔记二(类装载器的体系结构)

    java的class只在需要的时候才内转载入内存,并由java虚拟机的执行引擎来执行,而执行引擎从总的来说主要的执行方式分为四种, 第一种,一次性解释代码,也就是当字节码转载到内存后,每次需要都会重新 ...

  8. Java IO学习笔记二

    Java IO学习笔记二 流的概念 在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成. 程序中的输入输 ...

  9. 《SQL必知必会》学习笔记二)

    <SQL必知必会>学习笔记(二) 咱们接着上一篇的内容继续.这一篇主要回顾子查询,联合查询,复制表这三类内容. 上一部分基本上都是简单的Select查询,即从单个数据库表中检索数据的单条语 ...

随机推荐

  1. HDU5795A Simple Nim SG定理

    A Simple Nim Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Tota ...

  2. FUNCTION

    1,FUNCTION-1 CREATE FUNCTION `vendor_area_child_ids`(rootId INT) ) BEGIN ); ); SET pTemp = '$'; SET ...

  3. Oracle存储过程(转)

    Oracle存储过程基本语法 存储过程 1 CREATE OR REPLACE PROCEDURE 存储过程名 2 IS 3 BEGIN 4 NULL; 5 END; 行1: CREATE OR RE ...

  4. HTML <a> download 属性,点击链接来下载图片

    Html5里面的 标签的 Download 属性可以设置一个值来规定下载文件的名称.所允许的值没有限制,浏览器将自动检测正确的文件扩展名并添加到文件 (.img, .pdf, .txt, .html, ...

  5. 初识Polymer框架

    什么是polymer? polymer由谷歌的Palm webOS团队打造,并在2013 Google I/O大会上推出,旨在实现Web Components,用最少的代码,解除框架间的限制的UI 框 ...

  6. 用到的一些python包,记录下

    Requests beautifulsoup lxml logging gevent django Bottle numpy pandas sklearn pyopencv opencv_python ...

  7. JS控制TABLE表格在任意一行下面添加一行(有待完善)

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. Numpy Study 2----* dot multiply区别

    使用numpy时,跟matlab不同: 1.* dot() multiply() 对于array来说,* 和 dot()运算不同 *是每个元素对应相乘 dot()是矩阵乘法 对于matrix来说,* ...

  9. 把本地仓库工程上传到github上和从gitbu同步工程到本地

    1.在本地产生秘钥和公钥 [root@jacky git_project]# ssh-keygen -t rsa -C "jacky-lulu@1073740572@qq.com" ...

  10. 移动web点5像素的秘密

    最近和一个朋友聊天,朋友吐露了工作上的一些不开心,说自己总是喜欢跟别人比较,活得比较累,这种感觉大部分人经历过,往往觉得是自己心态不好,其实不然,这是人性,此时应该快速摆脱这种状态,想到DOTA大9神 ...