云和数据Unity虚拟现实大师班学员将大项目阶段的心路历程用文字记录,获得GAD腾讯游戏开发者平台官方连载,腾讯游戏学院的微信公众号将所有记录整理到一起进行形成了《开发日记》进行官方推送。梦想从云和起航!详情见:https://mp.weixin.qq.com/s/oAoIHiBBIzEGFhS4_Ri9rw。以下是部分文章内容:
开发日记:Unity完全自制游戏《纸箱战争》项目记录
最近半年时间通过培训机构接触到了Unity游戏制作引擎,通过半年的时间,临近毕业的时候需要制作一个大项目来验证学习结果,因此就确立了这个项目的诞生。
日期:20180629
制作时间为期三周,为了给自己增加难度更好的磨练自己,我自告奋勇要求一人制作项目,并且是完全原创的项目。
游戏玩法类似与战地系列的FPS对抗游戏,玩家可以利用在地图中的载具对目标点发起进攻,最后夺得目标争夺点取得游戏的胜利。
完全原创肯定就不能使用网络上的美术资源和他人分享的代码亦或是插件,鉴于美术基础太差,因此选择了简约的美术风格,有点类似《我的世界》那种方盒子感觉,最近在Steam上出现了很多类似风格的游戏,似乎都还卖得不错。
为了此次项目的成功进行,我还特意学习了一下在3Dmax中的骨骼蒙皮和动画制作,有了点大致的雏形。
因为从下周一开始才是正式的三周制作时间,之前我就制作了一部分,以下是已完成的部分。
因为游戏使用了简约的美术风格,资源占用量大大减少,所以便可以实现次时代大作中难以实现的部分,比如完全的场景可破坏性。
在上图中可以看到,树木可以分部位击落,落在地面后一段时间沉入地面随后销毁物体。
人物的自定义外观,这里算是投机取巧,本来是想要实现类似“人类一败涂地”中那种可以涂色的系统,苦于不知道怎么实现,于是就在鼠标划过的位置实例化出一连串的彩色物体代替画笔,最后发现每实例化出一个物体就会增加Batches的占用,估计在项目进展后期可能会删掉这个功能,或者演一下。
.
.
.
.
.
.
日期:20180706
今天完成了一些场景模型的布置搭建工作,还在发愁项目优化的问题。
AI的总体控制完成了,但个体AI离真正的实现还有很长的一段路要走,今天特意抽出了一些时间来思考个体AI的设定。
首先可以肯定的是,个体AI肯定是要比控制AI更加复杂多变。
其次,今天突然之间想到,如果是用AI来模拟真实的玩家,那么真正的玩家在游戏中的行为肯定会是无法预测的,并不会按照某一固定的模式执行规则。
因此之前设想过的通过需先编辑好的AI动作方法就只能放弃了,重新整理思路。
一定要确定的是一点,游戏中是分有不同的职业的,现阶段是分为突击兵、工程兵、反载具兵、医疗兵、狙击手。
在敌人是医疗兵或者是狙击手的情况下并不能对敌人的载具造成伤害,那么载具肯定就不会是他们的目标。
而工程兵或者是反载具兵的优先攻击目标肯定是威胁更大的地方载具单位。
医疗兵则会优先治疗友军,其次才是击杀敌人,狙击手则是要远程击杀目标。
考虑到这点,我就思索是不是应该把个体AI的寻获目标方式给封装成独立方法,因为并不需要时刻切换目标,和控制AI脚本一样,每隔一段时间调用一次就可以了。
在确定敌方目标的时候,我使用到之前写过的Camp脚本上的阵营,这样一来就需要多次的获取组件,担心多次的获取组件会影响到游戏的性能,对本就高负荷的游戏再增加更多的负担。
查阅资料后,发现获取泛型组件是相对节省资源的方法,但尽是这样还不够,考虑到了在遍历循环中每次遍历判断的时候都要获取几次组件,干脆把获取组件集体构造一次,这样应该能节省一些资源。
在获取了目标之后,就应该是对目标发起攻击了,这点考虑到了还有进攻目标点的原因,我认为应该添加一个追击时间,在追击了一段时间后,AI则会放弃追击,进攻目标点。
到目前位置,没有框架的致命缺陷就暴露了出来。
自我反思,在项目确立的时候就没有构思好全部的步骤,有些功能的实现只是因为一时的兴起而制作了,这样反而是打乱了整体的设计路线,如果有一个成熟的框架,代码编写则会简单很多。
早在项目建立阶段就没有考虑到这个问题,对自己的能力认识的还不够清晰,同学制作的手游几近完成,而我还卡在敌人的AI设定方面。
不过这也并没有打击到我的自信心,毕竟是PC游戏,复杂性远非那些手游所能比拟的,这对我是一次锻炼,也是对前段时间学习的一个总结。
.
.
.
.
.
.
日期:20180710
今天整理了个体AI的脚本,也算封装完成了。
封装以后,原先预计在2000到3000行的代码被精简到了700行以内。
经过测试,流畅是很流畅,但出了一个很严重的BUG。
不清楚是具体什么原因,AI总是会攻击队友,而且次数不在少数,莫不清楚头绪,检查了几遍自己封装的方法,初步估计原因是在目标寻获方法中出现的问题。
找来找去终于发现是因为一个简单的逻辑运算符给打错了,没想到居然会造成了这么严重的BUG,看来码代码的时候还需要更加仔细一些。
此外今天还解决了报错闪退的原因,闪退前控制台会瞬间报错后闪退,今天手快截图到了,在网上查了下解决方法。
我使用的Unity为5.45,在国内的网站上居然找不到解决方法,最后还是在外网上找到了类似的解决方案。
大概意思是说出现这个错误的原因是因为使用到了遮挡剔除的原因,相机上勾选了遮挡剔除,而场景中并没有对遮挡剔除的物体进行烘焙,才导致了这样的错误。
我试验了一下把已经红烘焙过但是没有使用到的遮挡剔除清除之后就再也没有出现闪退的情况。
之前还一直认为是因为用到了随机数Random的原因,因为Unity和C#中各有一个Random类,如果没有具体声明可能就出现错误,我还特意加上了Unity的命名空间来解决,没想到居然是因为遮挡剔除的原因才闪退的。
既然这样了,或许在之后的任务中就不能使用到遮挡剔除来优化游戏了,这么说还需要再别的地方想办法节约一定的资源占用量,又是不小的工程累积。
明天预计会完成AI驾驶坦克和飞机的工作,如果时间充裕的话还会设置到玩家控制角色的各种设置。
未完待续。
Copyright © 2013-2021 河南云和数据信息技术有限公司 豫ICP备14003305号 ISP经营许可证:豫B-20160281