谈谈自学U3D后第一次做游戏的所感所想

340 阅读5分钟

缘起

笔者是一名程序猿(服务端开发)。

身边盆油都喜欢玩儿游戏,曾经经常问我:你怎么不去开发一款游戏呢?可惜那时候年轻,觉得难,不敢试,怕失败,有贼心,没贼胆。

今年1月,笔者刷头条的时候,偶然看到了稚晖君UP的视频。笔者的世界观被彻底震撼了,同样为人,怎么就觉得自己是来人间凑数的呢?痛定思痛,笔者决定好好把握剩下的时光!虽然笔者承认自己永远达不到他那样的高度,但某愿尽力去追赶他的影子。于是接下来的时间里,笔者自学了单片机,吉他,绘画,和Unity 3D。

成果

GIT(源代码,需用Unity打开):gitee.com/kyzx/green-…

windows(下载可玩):zhaomaomao.net/CodeS.win.z…

mac(下载可玩):zhaomaomao.net/CodeS.mac.z…

笔者小时候有幸拥有过一台GBA SP,最喜欢的游戏之一便是《洛克人Z系列》。某日逛B站,偶然看到有UP主在用Unity做仿洛克人游戏。纸上得来终觉浅,绝知此事要躬行,于是果断决定用这个来作为检验学习成果的课题。

这是一款典型的2D横版动作游戏,笔者在熟知每一个套路的情况下,只需200秒就能通关。为这200秒,笔者肝了4个月。倒不是笔者愚笨,游戏开发全部利用下班和周末,社畜的业余时间实在有限。俗话说,不知他人苦,莫劝他人善。只有当自己经历过游戏开发,你才会知道,为什么游戏会有辣么多BUG!

历程

首先需要声明的是,做游戏和玩游戏,完全不是一档子事!

笔者来举一个栗子:洛克Z拔刀砍了一名敌人,整个过程在玩家眼里只有0.3秒。让我们看看游戏的背后发生了什么。

首先,开发者需要获取输入,笔者使用了新版的input system,用一个input action asset维护按键和事件的映射表。

然后,编写脚本处理对应事件,在这个脚本中,通知Z播放攻击动画(攻击动画哪来的?还不是用手做的!)。

播放动画的过程中,检测关键帧。拔刀是一个完整的过程,但我们希望,只有刀完全出鞘时才造成伤害,这个关键帧就是刀完全出鞘的那一帧。

如果动画播放到了关键帧,实例化一个碰撞检测体(这个对象玩家是看不到的),检测是否碰到了敌人,如果是,脚本会去调用敌人身上的脚本去扣血(或做出其他反应)。同时,我们还得调用Z身上的audio source组件,播放攻击声音!

你以为完啦?马达马达!吃了饭还得收碗呀,等攻击动画结束了,还得销毁刚才创建的碰撞检测体,否则,明明没有碰敌人,但他还是会疯狂碰瓷。

攻击结束后,主角切换到Idle状态。

上述过程还隐藏了诸多细节。个人总是有局限性的,不可能考虑得面面俱到。只要开发者没有想到的,没有处理的异常一旦发生,它们都会像洪水猛兽一般冲击你的游戏体验。

以上仅是主角的一个动作状态,而下图是主角的全部状态:

此时脑中响起一个声音:产品一句话,开发做三年。

令人崩溃的并非繁琐冗长的代码编写,而是各种莫名其妙的问题。笔者遇到的问题诸如但不限于:

卧槽,这代码怎么能跑起来?

卧槽,这代码怎么跑不起来了?

卧槽,这代码我明明没改,怎么就又跑起来了???

每每此时,笔者为平复内心波澜,只得双腿盘坐,双手合十,心中默念:佛祖保佑,永无BUG。片刻之后,披挂再战!每一名程序员都是持剑的勇士,不断寻找挑战名为BUG的恶龙,但勇者屠龙过后,终成恶龙(说人话就是,你以为你在写代码,其实你在写BUG)。

粗略地数了一下,一共写了77个脚本,恭喜该工程荣获笔者Unity项目脚本最多吉尼斯世界记录!

劝导

平时接触到很多人,想做自己的独立游戏。这是好事,但笔者仍然希望他们能慎重地考虑对待这件事情。这里不泼冷水,只陈列事实。

独立制作游戏,真的是一件需要极大勇气和毅力的事情。多少玩家只看到成功游戏光鲜亮丽的外表,而忽视了背后无数开发者的辛劳。

  • 游戏界面
  • 场景地图
  • 人物素材
  • 动画
  • 粒子特效
  • 数值
  • 剧情
  • 音乐,音效
  • 审美

全都要你一手操办。任何一件事要做好,都足够让人掉头发了。多少游戏,半路夭折。毕竟世上无难事,只要肯放弃。如果前路如此,仍无惧前行,那么恭喜,你将踏上一段无悔的旅程。

收获

能把这款游戏做出来,就已经算是超越了自我。

更何况,每当一个小小的功能完成测试通过时,一种满足感便会充盈笔者全身,那种美妙,难以言表。

也许就是这种所谓的延迟满足感,支撑的笔者,把一个空空如也的工程,渐渐地,慢慢地搭建成一个完整的游戏,看着它发芽,生长,开花,结果。不积跬步无以至千里,不积小流无以成江海,古人诚不欺我。

最后

最近打算休息一下,如果未来哪天灵光乍现,笔者也会打算做一款独立游戏。

游戏时,请保持窗口模式,像素游戏,全屏看到的就只剩马赛克了。

还留有一些BUG,如果发现动不了了,冲刺一下就好啦。

如果哪里卡关了,欢迎留言(笔者不会改)。

有想学习Unity的小伙伴,也欢迎交流。

就让游戏开始吧——麦迪文。2021年11月的最后一天。