欢迎光临散文网 会员登陆 & 注册

一个人做游戏——打气球手游(二)

2018-01-29 12:02 作者:枫2  | 我要投稿

先来看看上一期的坑

  1. 现在还没有写计分的效果

  2. 气球戳爆后的特效也没有加入

好了,本次UP会填这些坑

计分与失败的判定

我们来回顾一下,上一期的时候 点击气球后会在控制台出现提示,注意下图中的左下角提示。


那么如果要计分的话,也就是在控制台显示这段代码里修改了。

不过在写这个功能之前有个经验之谈,那就是我们要尽多的把数据存储在一个脚本代码里,这是为了以后的方便,所以我们首先创建个叫gameConfig的脚本,下图有个小细节,UP为什么一开始没有成功输入上game,是因为输入模式是中文,记得一定要在输入模式中途改成英文。

然后我在gameconfig中加入了这个代码

public static int scores;           //分数

这里就涉及到新姿势了,首先提一下int scores的的意思是定义一个叫做scores整数变量,这个曾经UP有讲解过,所以就不在多提。

今天我们在int scores前面加了个public static又是什么意思呢。

按照字面来理解就是共享与静态,不过这样说我相信肯定不会懂,如果以太专业的术语解释也不是UP的风格,所以我们还是用人类可理解的语言来说明。

public用在变量前,意味着这个变量可跨脚本使用,如果不加这个在别的脚本里就无法调用,至于怎么调用,下面马上就来。

static 的意思是在程序运行期间,记录的内容无论你怎么切换场景都是不变的,如果不加static,你切换一个场景记录就不见了。(有点像内存的那种感觉,只要不关机就会一直缓存这段内容,如果关机了当然就没有了)

当然,public static的内容确实是常驻在内存里的,所以不要写太多了就好,当然,这个数据在内存里占据1K都不到的空间吧,现在内存动不动几十个G的也不必太担心这个啦。


回到了hitBall脚本中,UP加入了一句这个,不过你会发现报错了,其实解决办法也很容易,创建一个名叫Plugins的文件夹(注意英文大小写),把gameConfig拖进去。


Plugins是什么意思呢,是Unity里的特殊文件夹,主要是用来放一些特殊插件的,尤其是需要调用功能的插件。

gameConfig.scores += 1;  意思是让gameConfig脚本里的scores变量增加1;

X += Y 实际上就是省略写法的  X = X+Y ,也就是把X的值改变成X+Y,再次申明=不是等号是赋值,如果不了解程序里=这个意思   可以看看UP之前的文章,或者去搜索下程序基础知识,顺带的你还需要了解 ++ 两个加号是什么意思,自己学习吧。

接下来UP把代码改成了这样,//是注释,以前也讲过,这里用不上一些代码了,但是UP又觉得未来可能有用,所以就注释掉,而不是直接删掉,这是写程序的经验,请学习。

print是什么意思就不再强调了,曾经UP说过,要学会用unity写程序,这个是必会知识。

运行程序,看看左下角,你有发现控制台上输出了什么吗,UP就不再解释了,相信到这里聪明的你自然明白这个是怎么实现的。

用UI显示出来打印的分数

于是UP回忆起了当时写过的文章,虽然这个项目暂时放弃了,但是依然告知了如何做UI。

于是UP就使用了超能力,让主界面瞬间产生了变化!(快醒醒,哦不,人不中二怎么做游戏)

这已经是Unity里的了,不再是PSD文件了

接下来我们要新建个脚本,叫做mailUI,主界面UI,首先我们在引用文件里加2行

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

//--------上面是创建时自带的,下面是我们加的-------//

using UnityEngine.UI;

using UnityEngine.Events;

加了UI的引用,才可以设置UI的文字变化,加了Events才可实现按钮效果,所以先都加上来吧。

然后把mainUI脚本拖到Canvas上,这里就不截图了,因为UP已经操作过许多这种操作了(其实主要还是B站专栏截图即贴图功能失效了,懒)

加入代码

public GameObject socres;           //把UI中的scores拖进来

然后在unity中拖:


可能有老司机说,可以用GameObject.Find这种功能查找模块,不过有大神说,尽量不要用这个功能来执行其他的操作,比较耗资源,所以UP就尽量不用了,除非是判断某个物体是否存在于游戏场景中,否则不用。

我们在Update里加一段代码:socres.GetComponent<Text>().text = gameConfig.scores.ToString();,然后运行一下


是的,这段代码的意思就是将gameConfig.scores所显示的文字赋予给UI里的text。

点击特效

其实这个要实现也很简单,我们需要了解unity里自带的粒子效果编辑器。


创建粒子效果器

粒子效果器初始的效果是这样的,我们改个颜色让大家看的更清楚


这个工具挺复杂的,具体每一条的意思大家可以去搜索一下,最终UP也是瞎调,搞出了个这样的效果。


然后大家也应该发现了,这个粒子效果器只是游戏里的一个组件,我们需要将其封装起来,不知大家还是否记得prefab,上一期里有提到。


现在我们封装了2个组件了

然后我们改改脚本

之前我们有一段这个代码,意思是点击到气球时,清除气球

                if (hit.collider.gameObject.transform.name == "redBall(Clone)")

                {

                    Destroy(hit.collider.gameObject);

                }

我们现在则需要在这一段代码上增加新功能,在删除气球的同时增加爆炸特效。

其实这个实现方法,如果各位看过上一期,那么相信你应该会怎么做了,就是这样:

  • 先把生成一个气球的代码Instantiate(ball, new Vector2(Random.Range(-2.3f, 2.4f), -6), transform.rotation);复制过来

  • 然后创建一个gameObject组件叫做boomEffect

  • 把prefab拖进boomEffect

  • 把上面那行代码的ball改成boomEffect,再修改下位置 Instantiate(boomEffect, hit.collider.gameObject.transform.position, transform.rotation);。

  • 基本上使用复制粘贴技巧就完工了

之后运行的效果是这样的,但是会发现有BUG


我们来解决下BUG,其实最大的问题是没有关闭粒子效果器的loop模式,我们再调节下参数。


有几个关键参数已经写出了名字

然后运行


看起来好像完美了,实际还有个问题,我们看看程序运行画面


有许多长得像忍者镖形状的东西,其实这些就是粒子触发器,如果存在太多的话也会影响游戏效率,所以我们要清除它。

新建脚本,写法如图

可能有人会问,为什么还要写个load方法,不可以直接写在update里么,不可以,会报错,具体为什么其实UP也不是很清楚,只知道必须要这样写。

结尾

好了,到这里差不多可结束了,看起不多的文字UP可花了一个下午的时间才写完,那么我们依然要继续为下一期挖坑。

  1. 失败的功能怎么实现(其实都是用之前教的办法复制粘贴就可以实现哦)

  2. 【策划篇】如何让游戏变得更有趣

因为截图量不是很够,所以有可能会不知道某些代码写在什么地方,不过UP已经把代码放在git上了,大家可以去git看源文件。

一个人做游戏——打气球手游(二)的评论 (共 条)

分享到微博请遵守国家法律