09Flappy Birds项目

2016-12-27  本文已影响20人  _谭小坤

项目结果演示##

结果演示
要达到的功能简介:
1、无尽模式。。。。玩家只要不能满足游戏规则。就可以一直玩下去。
2、可以实现闯关积分。
3、地形管道的随机生成。
4、游戏主角的碰撞检测。
5、背景及相关音乐的播放。
6、整个游戏结束后的相关处理,当前分数,最好分数的处理,及从新开始。

一、相关素材的准备工作##

导入素材结果
素材导入
图片的格式为true color保持图片的原始状态。不失帧。
图片格式的选择
相机的选择:有2种透视视角和正交视角。这里选择的是正交视角。整个游戏在3D环境中开发。
视角选择
游戏的载体:Quad这是一个面片。只会显示一面。
游戏载体的选择

二、游戏背景搭建##

1、材质球的选择:在这里选择如下图所示。这里扩充对Shader的学习了解。这里加大了Quad的Scale便于开发。
材质球的选择
2、地面back的创建:与背景一样只是图片不一样。从新创建了一个Quad 面片。在这里要了解。父物体与子物体之间的大小,相对位置之间的关系。
back的创建 结果演示
3、pipe的创建:需要成对出现。我们要考虑上下管道的距离,在创建一个Quad,里面是pipe图片。
pipe不可以过大,不然会把整个给覆盖掉。
一个面片上出现几对管道。这个不是我们考虑,需要有人对着个进行策划。
还要注意pipe在z轴上的关系,避免出错。就是管道在bg前面,在back后面。
pipe的创建
4、一个简单的面片创建好了,我们可以通过脚本进行整个游戏地图的移动,从而实现无尽模式。
下面进行主角,我们小鸟的创建了。
首先是创建一个Quad面片,把小鸟的Aphal通道图片贴到材质球上。但是有三个小鸟,那我们要进行处理。
通过控制Tiling和Offset属性显示为一张图片。并通过脚本控制小鸟运行时的上下摆动。
                                             
主角小鸟的控制 代码逻辑控制
5、管道的随机生成。注意在整个back上的上下距离(需要有人专门做测试)。
管道效果展示 随机生成代码
6、给小鸟主角添加钢体组件,并且水平有一个移动速度。可以实现小鸟的一直飞行效果。
效果展示 对应代码
7、给小鸟,地面,管道添加碰撞器。对小鸟的旋转只能在z轴上旋转,只能在x上移动。
碰撞器的大小选着合理。
小鸟的碰撞器及旋转运动逻辑 管道碰撞器的大小逻辑 地面的碰撞器
8、背景的移动,第一个背景过完之后,把第一个背景生成到最后一个。这样就可实现无尽模式了。
实现处理,找一个合适的触发器,在摄像机看不到当前背景时。实现此功能。
触发器的添加。。。添加到哪里才合适。。。要考虑。。。

单列模式的运用(游戏管理器)

单列模式 触发器的位置 背景的移动脚本控制
9、小鸟的水平移动控制。做好场景之后我们需要控制主角的行走了。主角在水平的速度需要特定的(有人策划)。
但我们按下鼠标左键的时候小鸟需要一个向上的速度。
小鸟的水平移动 代码控制水平移动 按下鼠标左键给一个向上的速度代码
10、摄像机跟随小鸟(主角)。这里用的是第一人称视角。
摄像机和小鸟的位置关系
11、分数控制。对分数进行控制。当小鸟闯过一堆管道的时候,我们就需要显示分数加一分。
我们需要在一对管道的中间增加一个触发器。用来判断小鸟有没有通过这个管道。
ui显示分数 触发器的添加 分数控制 UI
12、游戏状态控制:游戏开始状态,游戏进行状态,游戏结束状态。
游戏开始状态,不能让小鸟播放动画,不能跳跃。游戏进行时,这些状态可以实施。
游戏开始状态 游戏的三种状态 游戏开始状态转换游戏进行状态 游戏进行时获得的状态效果
13、游戏结束状态控制。游戏在碰到地面,碰到管道的时候,游戏就要结束了。
(只有游戏处于进行状态的时候,才会有游戏动画效果,和鼠标左键按下的时候施加一个向上的力)
对小鸟进行一个碰撞检测就行,如果碰撞的是管道或者地面就把游戏状态设置为游戏结束状态。

效果展示 碰到管道进行检测代码 碰到地面进行检测代码
还有个问题,我们游戏运行时让摄像机的照射范围处在场景中。需要对那个摄像机的y轴进行限制。
效果演示 代码控制演示

三、声音的添加,游戏记录的显示###

1、没有声音的游戏算游戏吗?从这句话我们可以看出声音的重要性。我们要学会控制在哪里进行声音的播发。声音的植入。
声音的添加
2、游戏记录面板的设定:在这些逻辑可以实施后,我们要对游戏进行一个后处理。玩家结束游戏之后。
我们需要显示出一个面板用来控制当前的分数,及最好的历史记录。
效果展示
            用UGUI做一个控制显示分数的面板.
控制面板所用的内容详解
               通过代码对分数的实施控制.
首先明确,这个面板必须在游戏状态结束的时候才会显示出来,当游戏状态处于结束状态时,我们必须把玩家获取的分数穿过来显示在UI面板上.
游戏结束状态调用的函数
控制分数的单列模式的运用(单列模式很重要).
UI与代码控制的相联系.
 public static GameMenu _instance;
    public Text nowScore;
    public  Text  highScore;
    public Image starting;

    void Awake()
    {
        _instance = this;
        gameObject.SetActive(false);
    }

    public void UpdateScore(float nowScore)
    {
        float highScore=PlayerPrefs.GetFloat("score",0);

        if (nowScore > highScore)
        {
            highScore = nowScore;
        }

        PlayerPrefs.SetFloat("score",highScore);
        print("123");
        this.nowScore.text = nowScore+"";
        this.highScore.text=highScore+"";
    //    if (Input.GetMouseButtonDown(0) && GameManager._intance.GameState == GameManager.GAMESTATE_END)
    //    {
    //        Rect rect=
    //    }
         }
   
按钮事件的重新开始.游戏结束的时候我们通过从新开始按钮发生点击的时候.
把游戏重新加载这个场景.用到SceneManager.LoadScene方法加载场景.
   public  void AgainGame()
    {
        SceneManager.LoadScene(0);
        //Application.LoadLevel(0);
    }
按钮点击事件

项目总结###

在这里Flapppy Birds项目就告一段落了.想想我们在这个项目里面有哪些比较重要的东西.

1.明确Shader这一方面的重要性.现在我们只是用到了其中的一个反面.还有那么多方面我们要去认真研究Shaer.
2.明确帧与Time类中的东西的关系.这样写代码的时候才不会不找边际.
3.摄像机跟随Bird用了第三人称视角.那我们要了解第一人称视角与第三人称视角.
4.PlayerPrefs用来的用法.相当于一个仓库.把我们需要的东西承储好,用的时候在拿过来用.
5.在以后的多场景游戏当中我们要通过SceneManager.LoadScene来加载场景.
6.在这个小游戏当中,我们就多次用到了单列模式,明确单列模式的用法,意义.(一个静态构造函数,在本类中可以通过,类名.(成员)获取信息,在非本类中通过类名.单列.成员名获取.保证了信息的一份性,不可new()多分.单列的意义)

上一篇下一篇

猜你喜欢

热点阅读