一个人做游戏(一)——打气球手游
UP之前教程发现坑开的大了点,以及对各位帮助也不是太大,所以《从零开始做游戏》这个系列暂停停更,以及UP重新开个坑。
本次新专题叫一个人做游戏,UP准备继这个专题做个很小的游戏,也就是一个人绝对可以完成的(至少UP一个人肯定可以完成)。
在这里会涉及到游戏的策划、程序、美术、音乐所有方面的讲解,当然UP策划出生,所以这里讲策划的地方肯定是最多的,想学游戏制作的小伙伴不要错过。
这个游戏开发成本很低,目前已经写好了想法框架,但是UP不会一次性把想法都放给大家看,在整个设计中,你会清楚一款游戏的需求是怎么增加起来的。

策划篇
这款游戏的规则非常简单,就是屏幕中会随机飞出气球,然后你只用一戳就爆炸了。
如果气球飞出屏幕就游戏结束,计算得分。
就是这么简单,开干。

美术篇
首先我们来画个大概游戏的界面,为了成本更低,我们使用540*960的分辨率来作游戏画面。
UP用PS+钢笔工具简单的绘制了游戏的界面,因为UP是个美术废,所以在设计的时候尽量希望以最简单的方式来设计画面。
然后就去搜索扁平风格背景图,然后找到了类似作文本的图片,于是UP觉得,这种感觉好像还不错,适合我这种美术废,于是便这样简简单单的绘制好了。
在绘制素材的时候可以去参考别人的设计,比如真实的气球,或者气球的UI图标等,然后模仿别人的样子自己画一个,因为这些素材都长的差不多,不会非常的存在版权问题,所以一般来说模仿一下没有问题。

虽然不是很好看,或许字体全部都搞成手绘风还会更舒服一些,不过这个问题今后再思考吧。
那么接下来UP准备打开程序,并切图了。

程序篇
我们首先准备项目,依然是U3D,依然是2D项目,UP建议没有一个多人团队最好不要玩3D游戏,否则工作量再翻倍。

接下来我们做的是切图,将之前的图每一部分都导出PNG,导出办法很简单,把所有图层都关掉,然后选择一个图层,剪切透明区域,存储为PNG格式,如果这个都不会,请先去找找Photoshop基础教程。

最后图片全部切好后是这样的:

然后我们开始干程序的事,程序的事情挺多的,首先第一步是让气球飞起来。
这里不再过多的描述UNITY的基础操作了,因为UP曾经有很详细的讲解过项目是如何安排在文件夹中的以及UNITY创建项目是怎么操作的,如果想知道,可以看看下面这个文章。

首先UP要教大家一个非常重要的脚本:
transform.Translate //平移
不过如果要写个往上飞的气球,应该这样写:
transform.Translate(Vector3.up* Time.deltaTime);
Vector3.forward的意思就是往上,Time.deltaTime又是什么意思呢。
Time.deltaTime简单的解释就是无论你设备配置有多高,都强行按照固定的速度上升,如果不加这一段,很可能你的电脑配置高移动速度就会更快,你的电脑配置卡移动速度就会更慢。
或许初学者还是没有明白,没关系,你记住上面那个语句就可以了,了解复制粘贴可以实现向上的功能就好。
题外话:U3D官网有每一个脚本的说明,但是却只有英文版,不过国内有人汉化了,详见www.ceeger.com/Script/
我们创建了个叫做ballFly的脚本,然后在里面粘贴了这段代码

我们把代码拖入气球中运行程序来运行一下

好了,下一步我们要解决点击气球后气球破掉的代码,我们首先要知道如何判断鼠标左键按下的脚本,也很简单。
if(Input.GetMouseButtonDown(0)) //如果鼠标左键按下
//执行后面的内容
接下来你要了解如何判断点到了气球,其实也很简单,在网上搜索一下Unity 2d 点击物体,就可以知道写法了。
其实这段写法的意思是,鼠标左键按下后,向鼠标点击的地方发射一条射线,如果射线碰撞到了物体(代码是“不是没有碰到物体”),则打印出物体的当前坐标和名字。

可能初学者依然很懵,碰撞是什么,其实在游戏设计中,最重要的就是碰撞,简单来说就是两个物体的区域重合了,实际上在游戏中每个物体都有个你看不见的框,只有程序才看得见,比如打飞机游戏中,物体子弹和物体机体重合了,就触发了一个碰撞。
而往往弹幕设计游戏中,都会把机体的碰撞框设置的比实际图片小,所以才有擦弹玩法
所以这里我们也需要为气球添加一个碰撞盒,同时你还可以更清晰的了解到什么叫做“你看不见的框”。

我们在设计碰撞框的时候,比实际气球还要更大一些,这是为了增加手感,降低游戏难度而做。
我们运行程序点击气球,出现了下图的显示,意思就是程序功能成功了。

接下来我们要让气球被点后boom。
首先我们把代码改成了这样,意思就是如果点击后判断名字是redBall,就打印boom

当然,这只是其中一个步骤,写代码的时候步子要小,最好每一个功能都测试通过再写下一个功能,不然的话最后发现出问题了都不知道哪里出的。
测试通过后,我们加了一句代码
Destroy(hit.collider.gameObject); //销毁这个物体。
好了至此我们基础功能就写完了。

但是这个游戏就这样会不会太无聊了点呢,而且根本就没有可玩性好吗,所以我们应该为气球加入随机生成的功能。
在学习生成前,我们需要知道一个概念Prefab模块化,简单的说就是把这个物体做成模板,让其可以批量化,而且修改的时候也可以只用修改prefab物体就可以批量把所有的组件修改掉。

接下来我们需要掌握一个代码,生成物体。
实例代码是这样:Instantiate (prefab, Vector3(2.0, 0, 0), Quaternion.identity);
然后我们最后修改成了这样:

上面的代码中,Random.Range是随机数,还有整个if功能是说在固定多少秒内执行一次这样的事情,这些知识在抛硬币教程里都教学过,有兴趣可以去看看上一期。
我们运行一下,现在情况是这样的

是不是觉得太死板了,有2个问题:
气球出现频率太固定
气球速度太固定
所以我们现在需要修改下这几个问题,具体代码UP会放入git里,之后去git看看吧。
最后我们做出了这样的小游戏,UP试玩了下


后记
用了一期时间来写这个教程,当然还是没有写完。
现在还没有写计分与死掉的效果
气球戳爆后的特效也没有加入
这几个需求就留在下一期完成吧
项目代码git:github.com/suxsho/terobiBalloon