牛必塞 发表于 2019-12-26 21:09:58

虚幻4RPG游戏角色技能系统使用流程(一)



在虚幻RPG类型的项目开发中,程序员需要给游戏中的每一个角色实现不同的技能。简单的技能如角色发出的一次普攻、补充血量和魔法值,复杂的技能像英雄的Q、W、E技能,不同的游戏角色有千万种变化。
当玩家通过按键或UI触发技能时会在程序中会产生一系列反应:比如释放一次攻击技能会消耗目标的血量和自身的魔法属性值,视觉表现上会产生粒子特效和Buffer特效,还需要播放一次攻击动画等等。




游戏项目中技能系统的开发非常重要且工作量巨大,特别是在RPG类型的游戏中,技能系统要花费程序员的很多时间和精力。
为了降低角色技能系统开发工作量,开发者可以考虑借鉴或使用虚幻引擎的技能系统组件(UAbilitySystemComponent),下面我以Epic平台的RPG游戏案例来说明如何使用这个系统。
技能系统是虚幻引擎内置的功能模块,Epic官方自研项目中也在使用这个系统。这个系统给开发者的方便之处在于这个模块已经搭建好了一个基础框架,开发者可以在这个模块的基类上自定义类来扩展需要的功能。
实现虚幻4技能系统需要开发者具备一些虚幻C++编程的知识,不了解的同学可以在官方文档中查阅相关编程的内容。




实现思路:首先在C++工程中继承并自定义属性类、技能类、资源类、技能组件类、角色类、游戏模式类、游戏实例类、资源管理器类等,然后创建自定义类的蓝图版本,在蓝图中重写函数与实现技能释放逻辑。这样给角色添加技能组件后,就可以通过鼠标输入来触发技能的释放。不同的技能需要提前配置好与之关联的技能效果和数值,在释放过程出会触发产生这些效果。
下面我们就开始讲解具体的实现过程。
1.启用Plugins
首先打开虚幻引擎,创建一个第三人称模板的C++项目,建议使用4.21及以上版本,我在这个演示案例中使用的是4.21版本,低版本的遇到过无法解决的bug。
在虚幻编辑器的Edit菜单中选择Plugins,搜索gameplay,找到并启用下图所示的Plusgins,之后必须要重启虚幻引擎才可以继续。


2.添加模组
我们要使用的技能组件相关类包含在虚幻引擎特定的模组中,所以现在打开项目的ProjectName.Build.cs文件,在公开依赖模组中增加"GameplayAbilities","GameplayTags","GameplayTasks"。在这个演示案例中需要用到Slate,所以现在可以把"Slate","SlateCore"模组一起放进去。关掉VS,在项目文件夹中重新生成工程文件并打开,让VS重新加载所有文件。


3.创建技能组件类
技能系统组件类(UAbilitySystemComponent)是虚幻源码的一个组件类,有了这个类就可以在角色类中创建组件属性了。在项目中你可以从继承这个类开始,创建自定义的技能组件类。自定义类中可以声明一些函数。


GetActiveAbilitiesWithTags(...)函数可以得到技能标签对应的可被激活技能(URPGGameplayAbility)并保存在数组中。GetActiveAbilitiesWithTags(...)函数的实现见下图:


这个函数中调用了UAbilitySystemComponent中的GetActivatableGameplayAbilitySpecsByAllMatchingTags(...)函数,这个函数通过比较参数GameplayTags与可激活技能数组中技能的GameplayTags,收集到应该被激活技能(URPGGameplayAbility)对应的FGameplayAbilitySpec。FGameplayAbilitySpec是一个结构体,其中定义了技能(URPGGameplayAbility)的具体信息和状态。
未完待续…

素岚听风 发表于 2019-12-27 17:00:47

我是个凑数的。。。

休闲 发表于 2020-1-4 04:25:30

楼主呀,,,您太有才了。。。

黎映玲 发表于 2020-1-6 11:47:44

不错 支持一个了

B比比 发表于 2020-1-8 00:24:28

支持,赞一个

冷毒士贾文和 发表于 2020-1-26 07:31:51

楼下的接上。。。。

萧笠翁寒江雪 发表于 2020-2-4 01:50:45

路过 帮顶 嘿嘿

薇薇安58 发表于 2020-2-15 23:52:34

看起来不错

蕞后旳牵强 发表于 2020-2-18 07:52:58

围观 围观 沙发在哪里!!!

于我的百年孤寂 发表于 2020-2-18 20:36:05

呵呵,低调,低调!
页: [1] 2 3 4 5 6 7
查看完整版本: 虚幻4RPG游戏角色技能系统使用流程(一)