说明:本次学习开始于2018年9月23日,至9月26日已看完全部教学视频,并已基本完成该案例的制作,历时四天。本文档为我在学习过程中,通过记事本记录的学习过程,对于该游戏案例的制作过程并不十分详尽,不作为教程使用,仅用于自己学习参考,记录于此,聊表心意。

★★游戏流程管理

首先建立一个空物体,挂载管理类,设置为单例模式:

public static GameManager _instance;
    void Awake() {
        _instance = this;
    }

在管理类中写小鸟初始化函数,先建立小鸟和小猪的列表,然后写初始化函数:

public List<Birds> birds;
    public List<Pig> pigs;
    //初始化函数,对于小鸟的列表,每排在第一个的小鸟激活,其他的不激活
    private void Initialized() {
        for (int i = 0;i < birds.Count;i++) {
            if (i == 0)
            {
                birds[i].enabled = true;
                birds[i].sp.enabled = true;
            }
            else {
                birds[i].enabled = false;
                birds[i].sp.enabled = false;
            }
        }
    }

然后写流程控制函数,该函数在小鸟销毁时调用(定义为公共),以便于下一个小鸟的初始化。

public void NextBird(){
        if (pigs.Count > 0)
        {//还有猪
            if (birds.Count > 0)
            {//还有鸟,初始化鸟
                Initialized();
            }
            else
            {//没有鸟,输了
            }
        }
        else
        {//没有猪,赢了
        }
    }

在小鸟的代码中写小鸟销毁函数,主要处理从管理类的列表移除当前小鸟,销毁当前鸟,生成小鸟销毁特效,调用流程控制(判断游戏流程)。(注意需要为小鸟也添加销毁特效不再赘述)

void DestoryBird() {
        GameManager._instance.birds.Remove(this);
        Destroy(gameObject);
        Instantiate(boom,transform.position,Quaternion.identity);
        GameManager._instance.NextBird();
    }
另外,在鼠标抬起的小鸟飞出的代码后面,加上调用小鸟销毁函数,在5秒后执行。
    Invoke("DestoryBird", 5f);
另外,在start函数中初始化小鸟状态:
    void Start () {
        GameManager._instance.NextBird();
    }

注意,在小鸟代码中需要将SpringJoint2D属性设置为public,以至在Initialized初始化函数中能够对其进行激活设置。(可设置在面板隐藏)如下:

[HideInInspector]
    public  SpringJoint2D sp;

★★小鸟生成位置优化,皮筋优化

位置优化,主要在小鸟初始化时,将其第一个小鸟位置设置为在场景中得到的第一个小鸟的位置。

birds[i].transform.position = originPos;

这里的初始位置,在Awake中得到。
先声明初始位置    public Vector3 originPos;

if (birds.Count > 0) {
            originPos = birds[0].transform.position;
        }

皮筋优化,在鼠标抬起时,禁用画线组件,鼠标按下时激活画线组件即可。
鼠标抬起:
        rightLine.enabled = false;
        leftLine.enabled = false;
鼠标按下:
        rightLine.enabled = true;
        leftLine.enabled = true;

★★小鸟拖尾效果(使用武器拖尾插件)

关于Pocket RPG Weapon Trails插件的使用在此不再说明,详细使用方法参考其他博客文章,因个人觉得这个拖尾效果不适合小鸟,故本次制作中也不再制作拖尾效果。

★★场景优化(搭建)

在目前的制作中,小鸟的数量是直接拖到游戏场景中,小猪的数量也是直接拖到游戏场景中,此两样暂时没有种类变化。

木头石头冰棍等其他障碍物,挂载的是小猪的代码,在场景中加入障碍物图集后,添加刚体和碰撞体,挂载小猪代码,不勾选是小猪,有如下参数需要具体说明:
【死亡速度】,【受伤速度】,【受伤图集】,【爆炸特效预制体】,【分数特效预制体】,其中还有其他的参数需要调整,及刚体组件的【质量】和【角阻力】,

可以将长木头,三角木头,石头,木头框,等不同类型的障碍物分别制作成不同的预制体,爆炸特效预制体或分数特效预制体有不同的,还需要分别制作。

游戏中的物体目前包括不交互的【背景】(背景天空,背景地面,背景小草等)
【游戏物体】(左右部分弹弓,小鸟,皮筋,小猪,障碍物)

背景的层级关系,可以通过order in layer手动调节,以正确显示,游戏物体则基本统一为一层,不发生层叠,弹弓处为例外,需单独调整。

游戏中的小猪和障碍物,手动摆放。

★★输赢界面制作

新建【ui】>【image】,双击它,点击其左上角的小框,按住alt可以改变填充。

改名字为lose,在其下建立三个图片分别是pig,home,retry,分别放置小猪图片,home按钮图片,retry按钮图片,其他诸如调颜色等的操作不再赘述。

选中lose,按ctrl+6打开动画编辑器,为该图片添加一个图片颜色的动画,设置第一帧的不透明度为0,保存动画。赢的界面与之相似,其他的不再赘述。

目前,有lose和win两个图片界面,这两个界面各自有一个动画状态机,各自有一个渐变效果的动画。

★★烟花特效(粒子系统)

在这里是导入烟花特效的包,里面有已经制作好的预制体,关于粒子系统参数的修改设置,在此处涉及不多,不再赘述。

★★渲染层级

【相机camera下的depth】,先绘制深度低的物体,前面的挡住后面的。
【同一个camera下的sorting layer】,层级数大的挡住小的
【同一个sorting layer下的order inlayer】,层级数大的挡住小的

区别于物体layer,大致作用类似于给不同物体的标签分类。

新建一个相机作为UICamera,渲染UI物体,这里有几项设置需要说明
【clear flags】设置为【只深度】,这样,在没有物体的地方,不显示东西。
【culling mask】设置为UI,表示只渲染UI层。
【projection】设置为正交。有透视和正交两个选项。
【depth】默认的主摄像机为-1,新建的摄像机设置为0。

在canvas中,将render mode 设置为相机,把刚建的UI相机赋值过来。

如此,将主摄像机的渲染UI层去掉,将特效root移动到每个要显示的星星下边,将层级设置为UI层,将粒子特效的sorting layer设置为player(这里是最上层显示,也可以设置成其他层),可以结合在场景视图中调整root的位置。

★★星星的逐一显示

在赢的UI中的win中,已经添加了一个动画,在激活win界面时,就会播放该动画,所以,给win添加一个脚本,写一个函数,
    public void Show() {
        GameManager._instance.ShowStar();
    }
调用,管理类中的星星播放函数,在win的动画结束帧添加事件调用脚本win中的函数,所以这里还要在管理类中写一个星星显示函数。如下
    public void ShowStar() {
        StartCoroutine("Show");
    }
    //协程控制星星的生成
    IEnumerator Show()
    {
        for (int i = 0; i < birds.Count + 1; i++)
        {
            yield return new WaitForSeconds(0.4f);
            stars[i].SetActive(true);
        }
    }
其中,涉及到了协程的基础使用方法,简单不赘述。
其中,新建了星星的gameobject数组,需要在编辑器赋值。
    public GameObject[] stars;

★★暂停界面UI

界面制作,不赘述。

在这里要先给暂停UI制作两个动画,一个是暂停UI出现,一个是暂停UI消失。

并给所有按钮图标添加上按钮组件,以便后续能够注册点击事件。

★★实现暂停和恢复的功能

首先是暂停UI动画状态机的设置,已经制作了两个动画,打开状态机,将默认动画设为新建一个空动画,空动画连接显示(添加bool变量值为true),显示连接隐藏(变量设为false),隐藏连接空。

然后开始写点击点击事件,给pauseUI添加代码,写上四个函数,分别是点击暂停,暂停动画结束,点击恢复,恢复动画结束,其内容如下:
    public Animator anim;
    public GameObject pauseButton;

//点击暂停,隐藏暂停按钮,播放显示UI动画
    public void Pause() {
        pauseButton.SetActive(false);
        anim.SetBool("ispause",true);
    }
    //点击继续,游戏继续,播放隐藏UI动画
    public void Resume() {
        Time.timeScale = 1;
        anim.SetBool("ispause", false);
    }
    //显示UI动画结束,游戏暂停
    public void PauseAnimatEnd() {
        Time.timeScale = 0;
    }
    //隐藏UI动画结束,显示暂停按钮
    public void ResumeAnimatEnd() {
        pauseButton.SetActive(true);
    }
给各个按钮注册点击事件,给动画结束帧注册事件。

在GameManager类中添加home和replay事件函数,注意在这里我添加了重新设置时间尺寸的语句,因为我在暂停界面的按钮也是调用的管理类中的函数。
    public void Replay() {
        Time.timeScale = 1;
        SceneManager.LoadScene(2);
    }
    public void Home() {
        Time.timeScale = 1;
        SceneManager.LoadScene(1);
    }

★★相机的跟随运动

在小鸟的update中添加如下代码
        //相机跟随
        float posX = transform.position.x;
        posX = Mathf.Clamp(posX, 0, 15f);
        Vector3 targetPos = new Vector(posX,
        Camera.main.transform.position.y,Camera.main.transform.position.z);
        Camera.main.transform.position = Vector3.Lerp
        (Camera.main.transform.position, targetPos, smooth * Time.deltaTime);

这里使用了数学类中限制值的函数方法clamp,参数(要限制的值,最小值,最大值),还使用了插值运算,方法lerp,参数(开始位置,目标位置,平滑速度)

★★音效添加

在这里使用的是AudioClip静态赋值的方式播放。
    //声明
    public AudioClip select;
    public AudioClip fly;
    //统一播放函数
    public void AudioPlay(AudioClip clip){
        AudioSource.PlayClipAtPoint(clip, transform.position);
    }
    //调用播放
    AudioPlay(fly);

另外,使用了碰撞体标签识别碰撞物体,选择性播放。
        if (collision.gameObject.tag == "Player") {
            AudioPlay(audioCollision);
        }
将这个代码写在小猪中,在这里的作用是,小猪和木板碰撞到小鸟后,小鸟发出碰撞的叫声。

siki学院_Unity初级案例_愤怒的小鸟_学习笔记2/3相关推荐

  1. siki学院_Unity初级案例_愤怒的小鸟_学习笔记1/3

    说明:本次学习开始于2018年9月23日,至9月26日已看完全部教学视频,并已基本完成该案例的制作,历时四天.本文档为我在学习过程中,通过记事本记录的学习过程,对于该游戏案例的制作过程并不十分详尽,不 ...

  2. siki学院_Unity初级案例_愤怒的小鸟_学习笔记3/3

    说明:本次学习开始于2018年9月23日,至9月26日已看完全部教学视频,并已基本完成该案例的制作,历时四天.本文档为我在学习过程中,通过记事本记录的学习过程,对于该游戏案例的制作过程并不十分详尽,不 ...

  3. siki学院unity初级案例炸弹人取空位置点的Bug

    问题描述:   在学习Unity初级案例炸弹人时,当取地图上的空位置点时,出现InitMap(2,2)取值不正确的情况.   程序获取的空位置点数   空位置图如下:   从图中可以看出空位置点数应为 ...

  4. python语言有哪两个系列_(转)Python学习笔记系列——Python是一种纯粹的语言

    在摸索适合自己的语言学习方法,看到一篇好文章,转之,侵删. Python的语法范式相当多.知识点相当细,但是Python是一种内在一致性很好的语言,理解了几条基本的规则,就很容易理解大部分语法与现象. ...

  5. y空间兑换代码_【CV学习笔记】色彩空间

    关注"深度学习冲鸭",一起学习一起冲鸭! 设为星标,第一时间获取更多干货 作者:云时之间来源:知乎链接:https://zhuanlan.zhihu.com/p/103387082 ...

  6. cs客户端 实时权限_【CS学习笔记】7、SMBbean的作用

    0x00 SMB Beacon 简介 SMB Beacon 使用命名管道通过一个父 Beacon 进行通信.这种对等通信对同一台主机上的 Beacon 和跨网络的 Beacon 都有效.Windows ...

  7. 得到app文稿导出_得到app学习笔记作为知识付费者,如何把所学内容快速输出?...

    原标题:得到app学习笔记作为知识付费者,如何把所学内容快速输出? 零.引子 昨天看到老公票圈更新了一条段子: 我就是那个伪勤奋者,在知识焦虑的胁迫下,这些年买了不知多少视频.微课.教程还有得到专栏. ...

  8. 案例驱动式Python学习笔记【第一篇】便捷水果店

    前言 后续的此系列博文用于记录案例式Python学习笔记记录,供本人和感兴趣的小伙伴一起学习!!人生苦短,我学Python! 驱动案例 便捷水果店:请为水果店开发一个收银的小程序,已知水果单价和购买重 ...

  9. group by rollup 变量名为空值_【Python学习笔记】07、数据类型和变量

    在Python中,能够直接处理的数据类型有以下几种: 整数 Python可以处理任意大小的整数,包括负整数,例如:1,100,-8080,0,等等. 计算机由于使用二进制,所以,有时候用十六进制表示整 ...

最新文章

  1. could not load inserted library: /usr/lib/libgmalloc.dylib
  2. 51nod1236 序列求和 V3
  3. 第三次学JAVA再学不好就吃翔(part84)--增强for循环
  4. linux shell sql赋值,Linux下shell执行SQL
  5. 愿你的指下有代码,眼里有星辰
  6. 华为手机卡在升级界面_你的华为手机变卡了,1分钟调整这3个功能,让手机再战3年...
  7. ASP.Net下使用ExtJS报“Ext未定义”错误的原因
  8. MATLAB每个字母等宽,等宽文本文件的导入选项对象
  9. 【转】SQL SERVER2005版本介绍
  10. jep 使用方法与简介
  11. breadweb控制台下载_路由器刷breed web控制台助手最新版
  12. 专访任玉刚:从菜鸟到资深工程师的进阶之路
  13. Cocos2dx中Lua游戏性能优化指南
  14. win10安装TeamView 提示rollback framework could not be initialized
  15. 关于springboot项目(@SpringBootTest单元测试类)找不到配置文件问题
  16. 数据库查询某行 或者 某列转换为数组方法,数据库脱机原理
  17. 6572 官方 支持 Android,MTK6572 android4.4上串口模块的调试
  18. 互联网平台思维与互联网思维(科技财经频道)
  19. U盘点击提示文件或目录损坏且无法读取打不开
  20. 会思考的饮水机:基于时间序列分析节能30%+

热门文章

  1. ScholarRanking中国高校计算机学科排名:第2名你绝对想不到
  2. day02 requests请求库爬取豆瓣电影信息+selenium请求库
  3. rpmbuild php,rpmbuild打包php
  4. 基于JFrame实现同学录管理系统,课程设计
  5. python pdf转txt
  6. Google Earth Engine ——GCOM-C 进行长期和持续的全球叶面积指数数据集(JAXA/GCOM-C/L3/LAND/LAI/V2)
  7. 一张图看懂阿里巴巴商业操作系统
  8. 懂你网络系列8之同源策略
  9. l4d2服务器难度修改,发两个自己写的插件给大家,高难度服务器必装!!!!!!!!
  10. 黑马笔记---创建不可变集合与Stream流