Unity 游戏实例开发集合 之 FlappyBird (像素鸟) 休闲小游戏快速实现

Unity 游戏实例开发集合 之 FlappyBird (像素鸟) 休闲小游戏快速实现

Unity 游戏实例开发集合 之 FlappyBird (像素鸟) 休闲小游戏快速实现

目录


一、简单介绍

Unity 游戏实例开发集合,使用简单易懂的方式,讲解常见游戏的开发实现过程,方便后期类似游戏开发的借鉴和复用。

本节介绍,FlappyBird (像素鸟) 休闲小游戏快速实现的方法,希望能帮到你,若有不对,请留言。

这是一个 2D 游戏,主要是使用精灵图、2D 重力、2D 碰撞体,实现,游戏实现原理:
1、鸟 x 方向位置保持不变,背景天空草地,管道等在从右向左不动移动,从而实现鸟向前飞行效果
2、鸟有重力效果,通过 GetComponent().Velocity 的 y 方向添加速度,从而实现鸟向上飞的效果
3、背景天空草地,管道 也有Rigidbody2D,但是 Body Type 是 Kinematic ,没有重力向下的效果,但是可以 设置 GetComponent().Velocity 向左的速度,实现匀速向左运动的效果
4、游戏暂停实现原理是:1)暂停效果:把背景天空草地,管道 也有Rigidbody2D的Velocity 设置为0 ,暂停时记录鸟的Rigidbody2D的Velocity ,把 Rigidbody2D的 Body Type 是 Static,从而实现停止效果;2)继续游戏效果:重新设置背景天空草地,管道 也有Rigidbody2D的Velocity 设置为0之前的原值,把鸟Rigidbody2D的 Body Type 是 Dynamics,Rigidbody2D的Velocity设置为之前记录的值即可,这样就恢复现场,继续游戏了
5、无限背景实现:把背景天空草地设置两份(可以根据需要设置多份),1) 两份左右拼接
2)先是左边的背景显示,背景一起向左边运动到左边看不见,左边的看不到的背景,重新移动到右边背景的右边,这样,就实现无限循环背景了
www.zeeklog.com  - Unity 游戏实例开发集合 之 FlappyBird (像素鸟) 休闲小游戏快速实现

二、FlappyBird (像素鸟) 游戏内容与操作

1、游戏开始,背景背景开始向左移动,鸟会受重力向下坠落

2、点击鼠标左键,鸟就会添加一个向上的力,避免坠落地面

3、鸟每过一个管子,就会有对应的分数增加

4、鸟撞到水管或者碰到地面,游戏则结束

三、相关说明

1、音频的枚举命名对应实际音频的名字,方便加载和指定播放音频

2、由于2D 游戏(元素都在同一平面),设置 SpriteRenderer 的 Order in Layer 来控制显示先后,Order in Layer 越大,显示就在前面,所以各个 Order in Layer 定义显示规则为 :天空预制体为 -5,草地 为 5,Bird 为 0,Pipe 下的上下管子为 2

3、Pipe 、GrassTile、SkyTile 的 Rigidbody2D, Body Type 是 Kinematic ,没有重力向下的效果

www.zeeklog.com  - Unity 游戏实例开发集合 之 FlappyBird (像素鸟) 休闲小游戏快速实现

4、脚本复刻这块建议:先复刻 Common 和 Tools 文件夹的脚本,然后 各个实体 文件夹的脚本,接着 Manager 的各个脚本(顺序可按实现步骤的顺序来),最后 GameManager 和 GameStart 即可

四、游戏代码框架

(其实可以把Manager 拆分 Server 和 Data,或者更好)

www.zeeklog.com  - Unity 游戏实例开发集合 之 FlappyBird (像素鸟) 休闲小游戏快速实现
www.zeeklog.com  - Unity 游戏实例开发集合 之 FlappyBird (像素鸟) 休闲小游戏快速实现
www.zeeklog.com  - Unity 游戏实例开发集合 之 FlappyBird (像素鸟) 休闲小游戏快速实现

五、知识点

1、MonoBehaviour 生命周期函数:Awake,Start,Update,Destroy

2、Input 按键的监控鼠标按键的状态

3、GameObject.Instantiate 物体的生成,GameObject.Destroy 物体的销毁

4、简单的对象池管理

5、Rigidbody 重力效果,添加 EdgeCollider2D ,进行 碰撞检测(Trigger)

6、简单UGUI的使用

7、简单屏幕适配(主要是UI和 Pipe生成位置)

8、一些数据,路径等的统一常量管理

9、Animation、Animator 的简单使用

10、游戏中 Tag 的使用

11、IManager 简单的接口规范 Manager 类函数

12、Action OnChangeValue 属性变化中委托的使用

13、Resources.Load() 代码加载预制体的使用

14、简单的屏幕坐标转为世界坐标的工具类

15、 SceneManager.LoadScene 加载,和 SceneManager.GetActiveScene() 当前场景的获取

16、游戏开发的资源脚本文件夹分类管理

17、等等

六、游戏效果预览

www.zeeklog.com  - Unity 游戏实例开发集合 之 FlappyBird (像素鸟) 休闲小游戏快速实现

七、实现步骤

1、打开 Unity,导入相关资源

www.zeeklog.com  - Unity 游戏实例开发集合 之 FlappyBird (像素鸟) 休闲小游戏快速实现

2、因为是 2D 游戏,场景中设置MainCamera 的Clear Flags 为 Solid Color,Projection 为 Orthographic ,Pos(0,0,-10),大家根据需要设置即可

www.zeeklog.com  - Unity 游戏实例开发集合 之 FlappyBird (像素鸟) 休闲小游戏快速实现

3、把导入的图片设置为 Sprite 精灵图

www.zeeklog.com  - Unity 游戏实例开发集合 之 FlappyBird (像素鸟) 休闲小游戏快速实现

4、把两张天空图拖入场景,左右拼接两张图,一个pos(0,0,0),另一个pos(20.25,0,0),20.25很关键,将作为循环背景移动的关键参考数据

www.zeeklog.com  - Unity 游戏实例开发集合 之 FlappyBird (像素鸟) 休闲小游戏快速实现
www.zeeklog.com  - Unity 游戏实例开发集合 之 FlappyBird (像素鸟) 休闲小游戏快速实现

5、把屏幕设置为 1920x1080 作为参考大小,天空显示如图

www.zeeklog.com  - Unity 游戏实例开发集合 之 FlappyBird (像素鸟) 休闲小游戏快速实现

6、同理,拖入草地的背景图,左右拼接,一个为pos(0,-2.5,0),另一个为pos(20.25,-2.5,0),效果如下

www.zeeklog.com  - Unity 游戏实例开发集合 之 FlappyBird (像素鸟) 休闲小游戏快速实现
www.zeeklog.com  - Unity 游戏实例开发集合 之 FlappyBird (像素鸟) 休闲小游戏快速实现
www.zeeklog.com  - Unity 游戏实例开发集合 之 FlappyBird (像素鸟) 休闲小游戏快速实现

7、把天空和草地作为预制体,其中图片显示层级做修改,SkyTile 的 Order in Layer 为 -5(显示在后面),GrassTile 的 Order in Layer 为 5(显示在前面面),两个添加 Rigidbody2D ,其中 Rigidbody2D 的 Body Type 设置为 Kinematic(不会有向下的重力,但是可以施加 Rigidbody2D.velocity 的速度效果),然后 拖到 Resources 作为预制体

www.zeeklog.com  - Unity 游戏实例开发集合 之 FlappyBird (像素鸟) 休闲小游戏快速实现
www.zeeklog.com  - Unity 游戏实例开发集合 之 FlappyBird (像素鸟) 休闲小游戏快速实现
www.zeeklog.com  - Unity 游戏实例开发集合 之 FlappyBird (像素鸟) 休闲小游戏快速实现

8、把两张飞行的鸟图拖入场景中,然后系统会自动生成一个动画和对应动画机挂载在图片上,运行场景,鸟动画大致如下

www.zeeklog.com  - Unity 游戏实例开发集合 之 FlappyBird (像素鸟) 休闲小游戏快速实现
www.zeeklog.com  - Unity 游戏实例开发集合 之 FlappyBird (像素鸟) 休闲小游戏快速实现
www.zeeklog.com  - Unity 游戏实例开发集合 之 FlappyBird (像素鸟) 休闲小游戏快速实现

9、把BirdHero_01 改名为 Bird,选中 Bird,在菜单栏 Window - Animation - Animation,打开动画编辑,添加 BirdDie 鸟死亡动画,选择 Add Property ,添加SpriteRenderer 的 Sprite ,然后在 0.00 和 0.01 添加死亡图片,完成BirdDie 动画

www.zeeklog.com  - Unity 游戏实例开发集合 之 FlappyBird (像素鸟) 休闲小游戏快速实现
www.zeeklog.com  - Unity 游戏实例开发集合 之 FlappyBird (像素鸟) 休闲小游戏快速实现
www.zeeklog.com  - Unity 游戏实例开发集合 之 FlappyBird (像素鸟) 休闲小游戏快速实现
www.zeeklog.com  - Unity 游戏实例开发集合 之 FlappyBird (像素鸟) 休闲小游戏快速实现
www.zeeklog.com  - Unity 游戏实例开发集合 之 FlappyBird (像素鸟) 休闲小游戏快速实现

10、选中Bird ,在Windows菜单中,选择 Animation - Animator,进入动画机,添加 Parameters参数来控制动画播放,这里添加Bool 的 IsDie 和 IsFly

www.zeeklog.com  - Unity 游戏实例开发集合 之 FlappyBird (像素鸟) 休闲小游戏快速实现
www.zeeklog.com  - Unity 游戏实例开发集合 之 FlappyBird (像素鸟) 休闲小游戏快速实现
www.zeeklog.com  - Unity 游戏实例开发集合 之 FlappyBird (像素鸟) 休闲小游戏快速实现

11、在空白处右键,添加一个空动画,作为Idle 动画,选中 Idle ,右键 设置为默认动画,选中Idle 右键,点击 Make Transition ,拖到 BirdFly,形成一个动画过渡条件,同理,添加各个动画过渡条件线如图

www.zeeklog.com  - Unity 游戏实例开发集合 之 FlappyBird (像素鸟) 休闲小游戏快速实现
www.zeeklog.com  - Unity 游戏实例开发集合 之 FlappyBird (像素鸟) 休闲小游戏快速实现
www.zeeklog.com  - Unity 游戏实例开发集合 之 FlappyBird (像素鸟) 休闲小游戏快速实现
www.zeeklog.com  - Unity 游戏实例开发集合 之 FlappyBird (像素鸟) 休闲小游戏快速实现

12、其中 Idle 到 BirdFly 的过渡线的条件,选择为 IsFly 为true,BirdFly 到 Idle 的过渡线为 IsFly 为 flase

www.zeeklog.com  - Unity 游戏实例开发集合 之 FlappyBird (像素鸟) 休闲小游戏快速实现
www.zeeklog.com  - Unity 游戏实例开发集合 之 FlappyBird (像素鸟) 休闲小游戏快速实现

13、其中 BirdFly 到 BirdDie 的过渡线的条件,选择为 IsDie 为true,BirdDie 到 BirdFly 的过渡线为 IsDie 为 flase (或者可以不要这根过渡线也可以),Idle 到 BirdDie 的过渡线的条件,选择为 IsDie 为true

www.zeeklog.com  - Unity 游戏实例开发集合 之 FlappyBird (像素鸟) 休闲小游戏快速实现
www.zeeklog.com  - Unity 游戏实例开发集合 之 FlappyBird (像素鸟) 休闲小游戏快速实现
www.zeeklog.com  - Unity 游戏实例开发集合 之 FlappyBird (像素鸟) 休闲小游戏快速实现

14、这样 Bird 的动画机完成了,整理一下相关资源,在 Bird 上,添加 Rigidbody ,和 BoxCollider2D,并整理BoxCollider2D大小适配鸟实际大小,然后把 Bird 拖入 Resources 作为预制体资源

www.zeeklog.com  - Unity 游戏实例开发集合 之 FlappyBird (像素鸟) 休闲小游戏快速实现
www.zeeklog.com  - Unity 游戏实例开发集合 之 FlappyBird (像素鸟) 休闲小游戏快速实现

15、把管子拖入场景,把 Bird 拖入场景中,为了适配鸟过去,添加一个空物体GameObject,改名为 Pipe(添加 Rigidbody2D,BodyType 设置为 Kinematic),把管子图片置于其下,上下一个,位置如下,DownColumnSprite 的 Pos(0,-6,0),BoxCollider2D 适配精灵图实际大小,UpColumnSprite的 Pos(0,6,0),BoxCollider2D 适配精灵图实际大小,ScoreEdgeCollider2D 位置和方向如图,刚好鸟在中间触发加分,并勾选 IsTrigger (可以碰撞触发,但没有实际碰撞效果)

www.zeeklog.com  - Unity 游戏实例开发集合 之 FlappyBird (像素鸟) 休闲小游戏快速实现
www.zeeklog.com  - Unity 游戏实例开发集合 之 FlappyBird (像素鸟) 休闲小游戏快速实现
www.zeeklog.com  - Unity 游戏实例开发集合 之 FlappyBird (像素鸟) 休闲小游戏快速实现
www.zeeklog.com  - Unity 游戏实例开发集合 之 FlappyBird (像素鸟) 休闲小游戏快速实现
www.zeeklog.com  - Unity 游戏实例开发集合 之 FlappyBird (像素鸟) 休闲小游戏快速实现

16、把设置好的Pipe 作为预制体,拖入 Resources 文件夹下

www.zeeklog.com  - Unity 游戏实例开发集合 之 FlappyBird (像素鸟) 休闲小游戏快速实现

17、在场景中添加一个空物体GameObject,改名为 World (pos(0,0,0)),然后把 Main Camera 等拖到其下,新建多个 空物体GameObject,依次命名为 SpawnSkyTilePos(天空背景的生成位置和父物体),SpawnGrassTilePos(草地背景的生成位置和父物体),SpawnBirdPos(Bird的生成位置和父物体),SpawnPipePos(管子的生成位置和父物体),AudioSourceTrans(音频播放源的挂载体),位置 都为 Pos(0,0,0)

www.zeeklog.com  - Unity 游戏实例开发集合 之 FlappyBird (像素鸟) 休闲小游戏快速实现
www.zeeklog.com  - Unity 游戏实例开发集合 之 FlappyBird (像素鸟) 休闲小游戏快速实现

18、 在 World 下添加一个 GameObject ,添加 EdgeCollider2D ,改名为 GroundEdgeCollider2D ,位置搞好放置到草地上(拖入草地预制体作为参考),如图,最