美文网首页
09Flappy Birds项目

09Flappy Birds项目

作者: _谭小坤 | 来源:发表于2016-12-27 16:32 被阅读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()多分.单列的意义)

    相关文章

      网友评论

          本文标题:09Flappy Birds项目

          本文链接:https://www.haomeiwen.com/subject/nkcjvttx.html