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

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

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

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

第一步:打开projectsettings,查看

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

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

Magic.Wood :木精灵魔法

Magic.Fire :火焰魔法

Magic.Ice :冰封魔法

Remote.BirdHit:飞鸟

Remote.Arrow:弓箭

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

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

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

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

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

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

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

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

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

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

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

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

另一组探索:

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

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

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

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

这是什么意思呢?

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

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

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

烈焰之鸟里的激活逻辑:

知识点:注意其中的EndAbility和OnEndAbility是很重要的节点。

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

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

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

第5.7步:保存编译,执行。

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

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

秒懂了吧。

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

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

Unreal Engine 4(虚幻UE4)GameplayAbilities 插件入门教程(三)技能标签(Ability Tags)的更多相关文章

  1. Unreal Engine 4(虚幻UE4)GameplayAbilities 插件入门教程(七)Ability的信息传递等

    本节及后面的内容将会探索更加有意思的内容,更加逼近实际的使用的内容.我们本节内容不难,讲的是释放Ability时的信息传递: 第一步:创建一个GA称为GA_AOE_BlindVengeance,复仇忌 ...

  2. Unreal Engine 4(虚幻UE4) GameplayAbilities插件入门教程(一)

    本文系笔者的实习生分享会内容预备兼GameplayAbilities的初学者教程. 本文适合已有四十天UE4开发经验的初学者. 参考资料:https://wiki.unrealengine.com/G ...

  3. Unreal Engine 4(虚幻UE4)GameplayAbilities 插件入门教程(二)

    我们接着学习.如果没有学习第一篇,请前往学习. 由于GameplayAbilities插件基本上没有资料(除了前面提供的那篇Dave的博文以外,再无资料,有迹象表明Dave是这个插件的开发者). 这个 ...

  4. Unreal Engine 4(虚幻UE4)GameplayAbilities 插件入门教程(四)技能屏蔽和简单的Buff等

    本节内容继续上一节教程的内容(如果没有看过前面的教程,请前往学习),不会讲太难的新东西,而是继续探究技能标签(Abiilty Tags)的内容.先来一道开胃菜. 第1.1步: 将上一次的召唤冰龙中的C ...

  5. Unreal Engine 4(虚幻UE4)GameplayAbilities 插件入门教程(六)GameplayEffect的级别设置

    本节的内容不难,权当是复习.如果没有完成前面的教程,请前往学习. 第一步:用一个csv文件表示级别数据,下图中的Hurt随级别1~7表示其损伤值在1~7级别时分别是-7,-14,-20等.写好之后关闭 ...

  6. Unreal Engine 4(虚幻UE4)GameplayAbilities 插件入门教程(五)技能属性集(AttributeSet)

    如果没有完成前面的教程,请前往学习.先上一段理论介绍(源于https://wiki.unrealengine.com/GameplayAbilities_and_You#GameplayTasks): ...

  7. 无废话ExtJs 入门教程三[窗体:Window组件]

    无废话ExtJs 入门教程三[窗体:Window组件] extjs技术交流,欢迎加群(201926085) 1.代码如下: 1 <!DOCTYPE html PUBLIC "-//W3 ...

  8. PySide——Python图形化界面入门教程(三)

    PySide——Python图形化界面入门教程(三) ——使用内建新号和槽 ——Using Built-In Signals and Slots 上一个教程中,我们学习了如何创建和建立交互widget ...

  9. Elasticsearch入门教程(三):Elasticsearch索引&映射

    原文:Elasticsearch入门教程(三):Elasticsearch索引&映射 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文 ...

随机推荐

  1. Images as x-axis labels

    Open-source software is awesome. If I found that a piece of closed-source software was missing a fea ...

  2. 微信小程序 生命周期函数详解

    微信小程序 生命周期函数 小程序中 判断当前首页是从其他页面返回,还是由入口打开 由于小程序的数据在我们退出小程序时并没有得到释放,因此再次点击开来数据依然没有变成初始化 解决方法:在小程序 data ...

  3. 点评阿里JAVA手册之编程规约(OOP 规约 、集合处理 、并发处理 、其他)

    下载原版阿里JAVA开发手册  [阿里巴巴Java开发手册v1.2.0] 本文主要是对照阿里开发手册,注释自己在工作中运用情况. 本文难度系数为三星(★★★) 本文为第二篇 第一篇 点评阿里JAVA手 ...

  4. Java之反射代码演示说明

    还不存在的类–即我们需要使用反射来使用的类 Person类: package com.qf.demo4; public class Person { private String name; publ ...

  5. Python之正则表达式(re模块)

    本节内容 re模块介绍 使用re模块的步骤 re模块简单应用示例 关于匹配对象的说明 说说正则表达式字符串前的r前缀 re模块综合应用实例 正则表达式(Regluar Expressions)又称规则 ...

  6. java利用WatchService实时监控某个目录下的文件变化并按行解析(注:附源代码)

    首先说下需求:通过ftp上传约定格式的文件到服务器指定目录下,应用程序能实时监控该目录下文件变化,如果上传的文件格式符合要求,将将按照每一行读取解析再写入到数据库,解析完之后再将文件改名. 一. 一开 ...

  7. 链表插入和删除,判断链表是否为空,求链表长度算法的,链表排序算法演示——C语言描述

    关于数据结构等的学习,以及学习算法的感想感悟,听了郝斌老师的数据结构课程,其中他也提到了学习数据结构的或者算法的一些个人见解,我觉的很好,对我的帮助也是很大,算法本就是令人头疼的问题,因为自己并没有学 ...

  8. 提高java编程质量 - (四)i++ 和 ++i 探究原理

    先看一个例子: package com.test; public class AutoIncrement { public static void main(String[] args) { int ...

  9. (转)微信禁用右上角的分享按钮,WeixinJSBridge API以及隐藏分享的子按钮等菜单项

    <!--禁用微信分享按钮--> <script> function onBridgeReady() { WeixinJSBridge.call('hideOptionMenu' ...

  10. JVM高级特性-二、JVM在堆中对象的分配、布局、访问过程

    前面介绍了jvm运行时数据区域后,下面讲解下对内存中数据的其他细节,看他们是如何创建.布局及访问的 一.对象的创建 1.对象的分配 对象的创建分配方式主要有两种:指针碰撞和空闲列表 指针碰撞: 假设堆 ...