本教程參考了https://wiki.unrealengine.com/GameplayAbilities_and_You,如果沒(méi)有學(xué)習(xí)前兩篇教程,請(qǐng)前往學(xué)習(xí)。
GameplayAbilities插件提供了強(qiáng)大的技能系統(tǒng),今天介紹的是和標(biāo)簽有關(guān)系的內(nèi)容。
第零步:隨便打開一個(gè)Actor,隨便查看一個(gè)組件,發(fā)現(xiàn)里面有tag:
這個(gè)Tag和我們本篇講的內(nèi)容無(wú)關(guān),不要混淆!
第一步:打開projectsettings,查看
添加一些Tag,什么是Tag呢?簡(jiǎn)單來(lái)說(shuō)就是技能(Ability)樹中的每一個(gè)標(biāo)簽。
如上圖的過(guò)程,添加如下Tag:
Magic.Wood :木精靈魔法
Magic.Fire :火焰魔法
Magic.Ice :冰封魔法
Remote.BirdHit:飛鳥
Remote.Arrow:弓箭
參考:https://www.youtube.com/watch?v=e2rdXo408Q0
第1.5步:在character的藍(lán)圖中創(chuàng)建一個(gè)tagscontainter結(jié)構(gòu)體,打開其眼睛(公開)。
知識(shí)點(diǎn)說(shuō)明:GameplayTag和GameplayTagContainer是對(duì)新手較為重要的兩個(gè)類型,其中前者是單個(gè)的Tag變量,后者可以看成是Tag的數(shù)組。
追加步驟:在這個(gè)Container中選擇火焰魔法(表明這個(gè)Container默認(rèn)含有火焰魔法)。
第二步【本步驟制作一個(gè)pickup類(我們稱為技能球),使得主人公拾取它時(shí)得到新的技能】:拉出一個(gè)球然后創(chuàng)建藍(lán)圖。
第2a步:對(duì)“技能球”加入一個(gè)變量如下,默認(rèn)值其實(shí)不重要,重要的是暴露。
第2b步【本步驟是關(guān)鍵,添加拾取邏輯】:添加一個(gè)shpere collision,注意它的大小要調(diào)整一下,它的半徑要比SM球大一些(這一點(diǎn)總很容易理解吧,因?yàn)橐屓宋锬軌蚺龅竭@個(gè)sphere collision)。拾取邏輯如下。這里有一個(gè)重要的節(jié)點(diǎn),就是AddGameplayTag,表示添加一個(gè)Tag到容器中?!菊f(shuō)明:下圖中的Hit事件不正確,應(yīng)該是oncomponentbeginoverlap事件】
追加一個(gè)拾取后消失的邏輯:
第2c步【放置這些“技能球”】:注意在細(xì)節(jié)面板中配置它們的skill,放置示意圖如下。
第3步【在人物中打印,看看是否有拾取到遠(yuǎn)程技能】:在人物中,下面的藍(lán)圖應(yīng)該不難看懂,不多解釋,其中重要的節(jié)點(diǎn)是MakeGameplayTagQuery和DoesContainerMatchTagQuery。
第4步:運(yùn)行測(cè)試,讓人物去拾取所有的技能球,然后不斷地打印,看看有沒(méi)有技能。
以上的小實(shí)例僅僅是一個(gè)開胃菜,GameplayAbilities插件提供了超級(jí)復(fù)雜的技能系統(tǒng)。我們繼續(xù)!
另一組探索:
第5.1步【創(chuàng)建Ability】:創(chuàng)建兩個(gè)GameplayAbility(注意別搞錯(cuò)了),命名為“烈焰之鳥”和“召喚冰龍”。
第5.2步【AbilityTags的講解】:在烈焰之鳥中配置AbilityTags為MagicFIre和RemoteBird,表示這個(gè)Ability有兩個(gè)標(biāo)簽:魔法-火焰 和 遠(yuǎn)程-鳥。(請(qǐng)注意點(diǎn)擊ClassDefault)
重要的講解:Ability Tags決定了這個(gè)Ability的標(biāo)簽!簡(jiǎn)單來(lái)說(shuō)就是這個(gè)Ability所具備的屬性(或者分類)。
第5.3步【CancelAbiliesWithTags的講解】:在召喚冰龍中配置它的技能標(biāo)簽(Ability Tags)以及“打斷技能列表”(CancelAbilitieswithTags)。
這是什么意思呢?
凡是“召喚冰龍”被激活時(shí),釋放者actor(簡(jiǎn)單來(lái)說(shuō)就是這個(gè)character)正在釋放的所有火魔法技能將被打斷。
我們希望召喚冰龍的時(shí)候,正在釋放的烈焰之鳥被中斷。怎么做呢?繼續(xù)看:
第5.4步:召喚冰龍里的激活邏輯:
烈焰之鳥里的激活邏輯:
知識(shí)點(diǎn):注意其中的EndAbility和OnEndAbility是很重要的節(jié)點(diǎn)。
上述邏輯表示:烈焰之鳥將要五秒鐘的蓄力事件才能釋放完畢。
第5.5步:在character中配置MyAbilities數(shù)組(這個(gè)不是天生就有的,它是作者自定義的類變量,如果不知道由來(lái),請(qǐng)看之前的教程):配置烈焰之鳥和召喚冰龍的Ability。
第5.6步:在人物character中寫激活技能的邏輯(其中的UseAbility1和UseAbility2其實(shí)僅僅是很簡(jiǎn)單的輸入事件,如果不知道由來(lái)的話,請(qǐng)看前面的教程)(注意:下面的示意圖中筆者展示了兩種不同的激活Ability的方法,不難理解)
第5.7步:保存編譯,執(zhí)行。
實(shí)驗(yàn)a:點(diǎn)擊z(UseAbility1的按鈕),等候5秒看到:
實(shí)驗(yàn)b:點(diǎn)擊z之后馬上點(diǎn)擊x(UseAbility2的按鈕),看到:
秒懂了吧。
還有很有趣的知識(shí)點(diǎn),下一篇教程大概也有點(diǎn)像鞏固課,會(huì)講一些新的內(nèi)容,但是不難。
原創(chuàng)聲明:本文系小江村兒的文杰原創(chuàng),若有參考的資料必在本文中給出。——小江村兒的文杰 zouwj5@qq.com 2017年7月14日14:44:47
http://www.cnblogs.com/JackSamuel/p/7170262.html