最近在思考怎麼做毒沼澤的功能,發現引擎中內建PainCausingVolume還蠻符合自己需求的,我們可以在這個Volume上設定傷害數值,並且設定每隔幾秒才觸發事件。
不過由於我的測試專案高度集成GameplayAbilitySystem(GAS),因此會希望所有的角色的數值變化操作都透過系統中的GameplayEffect來執行。由於PainCausingVolume跟GAS系統並沒有相依關係,為了這個機制要另外刻一個Volume又感覺有點多餘。不過好加在GAS系統本身製作的彈性還蠻大的,因此是有方法可以把這種外部的傷害數值注入,後續的傷害計算跟數值的加減就可以延著原本系統設計的邏輯進行,不需要再製作另一套系統維護。
其實方法還蠻簡單的,主要就是要在我們的給PainCausingVolume用的GE中的Magnitude Calculation Type使用Set by Caller,並設定一個GamplayTag讓系統知道之後要拿傷害的時候就去找這個Tag拿就行了。下圖我的這個Tag是設定成:GameEffect.SetByCaller.IncomingDirectDamage。
然後在角色的AnyDamage Callback中,我們就可以做出這個GameplayEffect,使用AssignTagSetByCallerMagnitude把實際的數值指定給這個Tag,然後就可以把這個效果套用給角色產生傷害,如下圖:
Leave a Reply