今天跟大家唠唠我搞的这个“愤怒的小鸟”小游戏,纯属个人爱没事儿瞎捣鼓,大家就当看个乐呵。
起因:
一开始也没想做这么个东西,就是有一天突然手痒痒,想找点乐子,正好看到手机上的“愤怒的小鸟”,回忆了一下当年用小霸王玩打砖块的快乐,念头就来了,咱也整一个。
准备工作:
- 得有个写代码的地儿,我选了Unity,这玩意儿上手快,素材也好找。
- 然后,就是找素材,网上东拼西凑,找了些小鸟、小猪、背景啥的图片,免费的,别想太多。
- 再然后,就是得想想这游戏怎么玩,物理引擎肯定要用,不然小鸟飞不起来。
开始动手:
1. 场景搭建:
先把背景图放进去,然后用Unity自带的Box Collider 2D搭了个简易的地形,反正就是让小鸟能站住脚就行。小猪和小鸟先随便摆几个,位置啥的之后再调。
2. 小鸟发射:
这是核心部分,也是最费劲的地方。
- 得让小鸟能被拖拽,这用OnMouseDown和OnMouseUp事件就能实现,记录一下鼠标的起始位置和结束位置。
- 然后,计算拖拽的距离和方向,这个就是小鸟发射的速度和角度。
- 用Rigidbody2D给小鸟一个力,让它飞出去。这里要注意,力的方向要和拖拽的方向相反。
这部分我调了很久,一开始小鸟不是飞不起来,就是乱飞,后来慢慢摸索,才找到合适的力度和角度。
3. 碰撞检测:
小鸟飞出去之后,肯定要撞到小猪或者地形,这里用OnCollisionEnter2D事件来检测碰撞。
- 如果撞到小猪,就把小猪干掉(Destroy)。
- 如果撞到地形,就让小鸟停下来。
碰撞这块儿也挺麻烦的,各种Collider要调整,不然小鸟会穿墙,或者明明没碰到,却触发了碰撞事件。
4. 游戏逻辑:
有了发射和小鸟的碰撞,基本的样子就出来了,然后就是完善游戏逻辑。
- 判断是否所有小猪都被消灭,如果消灭了,就进入下一关。
- 判断小鸟是否用完,如果用完了,游戏就结束。
- 加个简单的UI,显示剩余小鸟数量和当前关卡数。
遇到的坑:
这过程中,遇到的坑真不少。
- 物理引擎:Unity的物理引擎虽然好用,但是参数太多了,稍微调不小鸟就飞不正常。
- 碰撞检测:Collider的设置很关键,搞不好就会出现各种奇怪的bug。
- 性能优化:一开始没注意,场景里的物体多了之后,游戏就变得很卡。后来做了些优化,比如把不显示的物体Disable掉。
最终效果:
虽然画面简陋,玩法也比较粗糙,但好歹能玩了。发射小鸟,砸小猪,过关,没了。
这回做“愤怒的小鸟”小游戏,虽然没啥技术含量,但确实让我复习了不少东西。也让我体会到,做游戏真不容易,要考虑的东西太多了。最大的乐趣还是在于,把自己的想法变成现实的过程。
以后有机会,再跟大家分享我做的其他小玩意儿。