DG开发日志5——技能
假期结束了,回来把剩下的东西写完吧。今天是技能部分,还是挺复杂的,当时也折腾了挺久,但完成后再回看这些东西,发现主打的就是个小作坊开发,毕竟也没有太多资源,凑合凑合能用就行。主要还是看个思路吧。
以前在公司里做游戏时,几乎接触到的每个项目都会有个自研或从先前项目继承下来的技能编辑器,所以涉及到的工作也相对简单,无非就是设计好技能、拿到相关资源之后,到编辑器里配置各种数据,当然也会有一些需要调整编辑器功能的时候,但很少去设计构架。这次轮到自己做,也自然而然想到编辑器,查了文档发现虚幻是有一套自带的技能系统GAS的,但会有个C++的门槛,直接放弃,寻找其他途径。后来发现动画蒙太奇中是可以添加动画通知的,正好以前也用过unity中的动画事件做过技能,虽然不太优雅,但能跑得起来,就直接选择了这种方式。
动画通知顾名思义其实就是在动画蒙太奇的时间轴上加一个自定义的通知,当通知被触发时,对应角色动画蓝图上的动画通知事件会一同被触发,这样就能执行一些基于技能动画播放进度的逻辑。整理一下思路,得到一张流程图(图一),下面根据流程图顺序简单说一下各部分。
在之前的日志里也聊到过行为树,因为需要边移动边攻击,就把释放技能相关的节点做成了服务,这样可以在执行移动行为时,同步执行攻击。另外为了让行为树实现最大程度的通用,执行攻击也只是根据技能释放距离(角色属性表里的数据)判断是否进入攻击状态,并不关心具体怎么攻击。进入/停止攻击状态时,会触发战斗角色actor中的事件。
当战斗角色actor中的攻击事件被触发时,先去检测有没有正在释放技能,以及技能是否在CD,这两个东西都是通过在技能释放执行之后设置计时器并配合一个bool变量实现的,具体的技能CD和技能时长也填在了角色属性表里。(这里的角色技能时长尝试过直接去取动画蒙太奇的时长,试验后发现有时会出现取不到数据的情况,就干脆改成了填表)如果前边的检测通过就根据属性表中配置的技能名,播放对应的动画蒙太奇,并开始CD。(后来因为boss型角色技能太少,就给这里加了一个检测是否有第二个技能的逻辑,如果一技能不能释放,检测有没有二技能可以用。但这会是个隐患,如果技能比较多,那就很麻烦,不过这小项目大概率遇不到,直接偷懒不管)
动画蒙太奇这里比较简单,第一个技能是射击,就直接在起始动画包里取了一个射击动作,用它创建了动画蒙太奇,并在产生后坐力那一刻添加了射击的动画通知。因为前面AI和角色部分都是通用的,这样就相当于是每次做新技能时就会新增一个蒙太奇文件,各种技能都是用这些文件进行索引,也相对好管理。
*另外这里还有一些别的动画相关的事情,之前在ai那里拆分了战斗状态和常规状态(之前好像忘提了),战斗状态下的移动方向和角色朝向其实是不一致的,另外也因为需要边走边打,所以需要对原有模板的动画状态机做调整,但主要是针对战斗状态。战斗状态下,拆开上下半身,上身使用手持武器的待机动作,下半身用了一个2d的混合树,让脚步方向与移动方向对应上,攻击时再把攻击动作混合和到上半身,基本就算搞定。但是吧,因为资源都是epic官方的免费资源,射击动作幅度不大还好,后边有了近战之后,拼拼凑凑的效果就非常丑陋,如果有美术大哥帮忙搞搞就好了。
动画蓝图收到通知,触发相对应的事件,执行对应的技能效果,第一个技能是射击,所以效果就是发射一颗子弹,很简单,但是后边的问题可能很大。这个做法需要把所有的技能逻辑全堆在一张动画蓝图里,如果这个游戏往完了做,三五十个技能起步吧,一张图里管理这么多内容绝对要疯(如图二,到第四个砸地技能就已经这么多了),未来还是需要优化一下。
接着就是子弹,也相对简单,单独创建子弹actor,挂投射物组件,检测碰撞,检测阵营,播放特效音效,应用伤害(要取一下双方属性做个计算),自销毁。
到这为止,角色部分的内容就差不多完成了,下次再更就是关卡和地图生成,再总结一下,大概这个系列也就这样了。后面大概会自己参与一下booom(或者有大佬需要我这样的人抓紧拉我一下),可能还会写点,先这样吧。
食品经营许可证 JY11105052461621
©2024 GAMECORES
评论区
共 条评论热门最新