本教程参考了https://wiki.unrealengine.com/GameplayAbilities_and_You,如果没有学习前两篇教程,请前往学习。

GameplayAbilities插件提供了强大的技能系统,今天介绍的是和标签有关系的内容。

 

第零步:随便打开一个Actor,随便查看一个组件,发现里面有tag

iOS培训,Swift培训,苹果开发培训,移动开发培训

这个Tag和我们本篇讲的内容无关,不要混淆!

 

第一步:打开projectsettings,查看

iOS培训,Swift培训,苹果开发培训,移动开发培训

 

添加一些Tag,什么是Tag呢?简单来说就是技能(Ability)树中的每一个标签。

如上图的过程,添加如下Tag

Magic.Wood :木精灵魔法

Magic.Fire :火焰魔法

Magic.Ice :冰封魔法

Remote.BirdHit:飞鸟

Remote.Arrow:弓箭

iOS培训,Swift培训,苹果开发培训,移动开发培训

参考:https://www.youtube.com/watch?v=e2rdXo408Q0

1.5步:在character的蓝图中创建一个tagscontainter结构体,打开其眼睛(公开)。

iOS培训,Swift培训,苹果开发培训,移动开发培训

知识点说明:GameplayTagGameplayTagContainer是对新手较为重要的两个类型,其中前者是单个的Tag变量,后者可以看成是Tag的数组。

iOS培训,Swift培训,苹果开发培训,移动开发培训

追加步骤:在这个Container中选择火焰魔法(表明这个Container默认含有火焰魔法)。

iOS培训,Swift培训,苹果开发培训,移动开发培训

第二步【本步骤制作一个pickup类(我们称为技能球),使得主人公拾取它时得到新的技能】:拉出一个球然后创建蓝图。

iOS培训,Swift培训,苹果开发培训,移动开发培训

2a步:对“技能球”加入一个变量如下,默认值其实不重要,重要的是暴露。

 iOS培训,Swift培训,苹果开发培训,移动开发培训

2b步【本步骤是关键,添加拾取逻辑】:添加一个shpere collision,注意它的大小要调整一下,它的半径要比SM球大一些(这一点总很容易理解吧,因为要让人物能够碰到这个sphere collision)。拾取逻辑如下。这里有一个重要的节点,就是AddGameplayTag,表示添加一个Tag到容器中。【说明:下图中的Hit事件不正确,应该是oncomponentbeginoverlap事件】

iOS培训,Swift培训,苹果开发培训,移动开发培训

追加一个拾取后消失的逻辑:

 iOS培训,Swift培训,苹果开发培训,移动开发培训

2c步【放置这些“技能球”】:注意在细节面板中配置它们的skill,放置示意图如下。

 iOS培训,Swift培训,苹果开发培训,移动开发培训

3步【在人物中打印,看看是否有拾取到远程技能】:在人物中,下面的蓝图应该不难看懂,不多解释,其中重要的节点是MakeGameplayTagQueryDoesContainerMatchTagQuery

iOS培训,Swift培训,苹果开发培训,移动开发培训

4步:运行测试,让人物去拾取所有的技能球,然后不断地打印,看看有没有技能。

iOS培训,Swift培训,苹果开发培训,移动开发培训

以上的小实例仅仅是一个开胃菜,GameplayAbilities插件提供了超级复杂的技能系统。我们继续!

 

另一组探索:

5.1步【创建Ability】:创建两个GameplayAbility(注意别搞错了),命名为“烈焰之鸟”和“召唤冰龙”。

 iOS培训,Swift培训,苹果开发培训,移动开发培训

iOS培训,Swift培训,苹果开发培训,移动开发培训

iOS培训,Swift培训,苹果开发培训,移动开发培训

5.2步【AbilityTags的讲解】:在烈焰之鸟中配置AbilityTagsMagicFIreRemoteBird,表示这个Ability有两个标签:魔法-火焰 和 远程-鸟。(请注意点击ClassDefault

 iOS培训,Swift培训,苹果开发培训,移动开发培训

重要的讲解:Ability Tags决定了这个Ability的标签!简单来说就是这个Ability所具备的属性(或者分类)。

 

5.3步【CancelAbiliesWithTags的讲解】:在召唤冰龙中配置它的技能标签(Ability Tags)以及“打断技能列表”(CancelAbilitieswithTags)。

 iOS培训,Swift培训,苹果开发培训,移动开发培训

这是什么意思呢?

凡是“召唤冰龙”被激活时,释放者actor(简单来说就是这个character)正在释放的所有火魔法技能将被打断。

我们希望召唤冰龙的时候,正在释放的烈焰之鸟被中断。怎么做呢?继续看:

 

5.4步:召唤冰龙里的激活逻辑:

 iOS培训,Swift培训,苹果开发培训,移动开发培训

烈焰之鸟里的激活逻辑:

iOS培训,Swift培训,苹果开发培训,移动开发培训

知识点:注意其中的EndAbilityOnEndAbility是很重要的节点。

上述逻辑表示:烈焰之鸟将要五秒钟的蓄力事件才能释放完毕。

 

5.5步:在character中配置MyAbilities数组(这个不是天生就有的,它是作者自定义的类变量,如果不知道由来,请看之前的教程):配置烈焰之鸟和召唤冰龙的Ability

iOS培训,Swift培训,苹果开发培训,移动开发培训

第5.6步:在人物character中写激活技能的逻辑(其中的UseAbility1UseAbility2其实仅仅是很简单的输入事件,如果不知道由来的话,请看前面的教程)(注意:下面的示意图中笔者展示了两种不同的激活Ability的方法,不难理解)

iOS培训,Swift培训,苹果开发培训,移动开发培训

 

5.7步:保存编译,执行。

实验a:点击zUseAbility1的按钮),等候5秒看到:

iOS培训,Swift培训,苹果开发培训,移动开发培训

实验b:点击z之后马上点击xUseAbility2的按钮),看到:

iOS培训,Swift培训,苹果开发培训,移动开发培训

 

 

秒懂了吧。

 

 

还有很有趣的知识点,下一篇教程大概也有点像巩固课,会讲一些新的内容,但是不难。

 

原创声明:本文系小江村儿的文杰原创,若有参考的资料必在本文中给出。——小江村儿的文杰 zouwj5@qq.com 2017年7月14日14:44:47

http://www.cnblogs.com/JackSamuel/p/7170262.html