Unity学习笔记(18)——FlappyBird

今天学习Flappy Bird的6~8节教程

1.首先是常规的GameController的脚本,学到一个新概念,singleton pattern单例模式。教程中采取的步骤是在其中声明了一个静态的实例public static GameController instance,在另一个类中直接使用了GameController.instance.函数的方式来调用。除此以外,在本类中检测是不是只有单一实例的代码如下:

单例模式

这样的方式好处在于整个游戏只会有一个GameController,不会引起混乱。不过不考虑这一点的情况下,用以前学过的方法,在需要调用的类中声明一个GameController类的实例,然后调用函数,也是可行的,不知道区别在哪

2.接下来开始要做滚动的背景了,提一点之前忘了的知识点,Rigidbody中可以选择BodyType为kinematic,这样物体不会受重力影响,只会受脚本影响。在看教程之前,自己尝试了一下用土办法来写滚动的背景,把背景复制两份然后前后拼接起来,坐标大于某值就重置,鼓捣了一下,无缝对接了……瞬间不是很有动力去看教程怎么写的了,现阶段会抓老鼠就是好猫

位置大于多少,就重置

3.还是看了一下,教程用的方式有些不一样,只复制了一份背景,当背景移动出去后,就把它移到最前方去,用到一个Collider.size.x的方法,来代表长度,可拓展性会好很多。其实两种方法本质上是一样的,我把自己方法里的20改为0,就可以删掉一个复制出来的背景了。

4.第八节添加障碍,在学教程前按照所猜想的方式自己尝试了一下(其实长达一个半小时),终于能够:按照固定起始位置、固定左右间隔、固定上下间隔、随机上下位置的生成N个障碍,并且每通过一个都会得分了。这里的N,意思是代码里写了几个就是几个,没有办法无限生成。先说说踩的坑吧:

    1)Collision和Trigger搞了一会儿,Collider组件上的Is Trigger忘记勾选,导致被当做碰撞体了

    2)没注意OnTriggerExit2D中的“2D”,这里鼓捣了半天才发现

    3)不能直接给position赋值,于是在update中直接修改transform.tranlate,导致unity卡死了好几次,最后在网上搜了个解决方案,用了个中间变量pos1,给pos1.y赋值,再把pos1赋给transform.position,就好了

绕过position不能赋值的问题

本来比较早就能发完笔记的,结果一看教程的内容自己“应该会做”,搞到这么迟……明天得琢磨一下类似于背景的移动和随机机制,如果可以的话,加上起始位置、左右间隔、上下间隔的随机。最后再看看教程给的答案,应该能有所收获。

2018.11.7 1:57

你可能感兴趣的:(Unity学习笔记(18)——FlappyBird)