UE4制作沙盒RPG

RPG游戏开发日志3:简单技能的实现

2019-04-23  本文已影响0人  李维民0512

本项目同步上传于github和coding上,国内读者可以通过在coding下载项目,从本篇开始,已经将Tutorial分支合并到dev分支,之后只在dev分支做开发,并保证master分支是相对稳定的版本。也欢迎你加入我的UE4学习交流QQ群:872537977。如果你喜欢我写的文章,也希望你点赞、收藏、转发。谢谢!

github地址:https://github.com/Liweimin0512/uRPG

coding地址:https://git.dev.tencent.com/JeremyBrett/uRPG.git

这篇文章我们制作2个十分粗糙的技能,分别是这样的效果:

1、恢复自身一定数值的生命值

2、向角色前方发射一个火球,并对碰触到的第一个敌方角色造成伤害

请注意,这篇文章所实现的方式本身存在很多缺点,之所以这样做是为了解释我在开发中踩过的坑,并且为之后的重构做一个伏笔,这里我们不会引入“动画蒙太奇”的概念。但看完这篇文章,你基本会理解这个玩意儿真的很有用。

项目设置

首先在 项目设置-输入 中添加一些技能案件,我这里添加了10个,分别对应按键1~0:

添加ActionMapppings

动画状态机调整

首先是状态机的调整,这里我们加入两个动画状态,直接在右下角选择对应名称的动画并添加到这里即可。

状态机调整

并且在动画状态机蓝图中添加两个布尔型变量,分别命名为Casting1H和Attack,用于状态的切换。

布尔型变量

因为很简单,这里只贴出其中一个条件,其他同理。

CanEnterTransition

之后就是在状态机的事件图表中,我们需要将Owner 转换为 Bp_CharacterBase类型,才能获取Bp_CharacterBase蓝图中的这两个变量(也就是说在角色蓝图中也需要两个同名、同类型变量),并和蓝图中的这两个同名变量关联上。

关联上变量

这样动画蓝图中的准备工作就做好了,这一步操作的目的其实就是让角色在释放技能时候播放对应的动作。

技能设计思路

技能释放的流程大体如下:

1、从玩家输入释放技能的指令开始;

2、判断能否释放技能(状态判断、技能CD判断等);

3、释放技能,这部分包括技能表现效果(播放动作、生成特效等)、技能逻辑效果(产生一个道具、改变角色状态或属性等)两部分;

4、进入技能CD阶段;

其实更深层次的考虑的话,技能还应该拆分为前摇、生效、后摇等几个阶段。但这不在这篇日志的讨论范围内,会在之后技能的进阶开发日志中做更详细的讨论。

恢复生命值效果技能

当玩家输入指令后,首先进行判断,我这里做的判断包括:技能CD判断、是否正在释放技能判断、Mana值是否足够判断。

技能释放判断

当Mana值不足时,会有一个提示效果,效果很简单会在后文中详述。这里给出蓝图节点如下

Mana不足提示

技能判断通过,可以释放技能了,我这里首先禁用了角色的移动(不禁用也可以,只是会很违和。因为释放技能的动作没有和移动动作融合,这个也会在之后的文章中详述)

禁用移动

然后便是技能的效果,首先就是播放动作,只需要将变量Casting1H设置为True即可。然后便是通过上篇文章所写的StatManager提供的ModifyStat函数对Mana和Health的数值进行调整即可。

技能效果

实际上这时候技能效果已经完成了,这里我额外在角色Mesh的右脚(RightFoot)骨骼的坐标位置生成一个特效。然后手动创造了一个2秒钟的延迟(基本是动作播放完成的时间)。并将Casting1H变量归位即可。哦对了,别忘了把移动重新开启。

技能特效

这个特效包含在免费素材中,可以直接下载使用很方便

Infinity Blade:Effects

最后,技能完成,进入CD阶段,其实CD阶段也很简单。我这里假设技能CD默认为1,当技能CD不为1的时候就+0.05,然后延迟0.2秒钟循环判断,直到CD为1为止:

技能CD

这样,一个技能就算是完成了,运行一下,试一试,OK可以。进行下一项。

攻击技能

攻击技能让我们释放一个火球,所以首先我们创造一个火球Actor命名为MagicProjectTile,这个Actor中有两个比较重要的组件1个是Sphere我们选一个好看的特效即可。一个就是ParticleSystem用以控制移动。

火球Actor

技能的判断与上面的技能相同,这里不再重复了,重点看技能的效果实现部分。这里我用了两个Delay节点,其实就是模拟上文中说到的前后摇时间,在动作播放到恰当的时候才创建这个火球,并通过获取角色当前位置做一个偏移的位置来生成火球。

生成MagicProjectTile

之后的技能CD部分与上文中的恢复生命值技能相同,这里也略过不谈。

UMG_NoManaPopup

其实这个UI只是一个添加了动画的Text控件,动画的内容就是在一段时间内改变了控件的Transform和透明度,感兴趣的可以直接看源码。

UMG_NoManaPopup

总结

运行,测试,完美(至少目前为止是这样的)!

上一篇 下一篇

猜你喜欢

热点阅读