## 受击系统 ### 相关属性 - 韧性:通过穿戴装备(功法)从而获取的一种属性。在该属性>0时角色不容易出现硬直;属性<=0时容易出现硬直。 - 削韧:武器附带的一种属性。在武器攻击到目标后,会削减目标的韧性。 黑魂还存在以下属性,以此对不同武器对应不同类型怪物的产生硬直关系进行更加精准的控制,暂不考虑属性: - 强韧度:怪物抵抗硬直产生能力的等级。分为等级0~3。最高等级应该为`冲击力最高等级-1`。该属性的设计目的是为了保证高攻速的轻武器无法打出中重硬直。 - 冲击力:武器能够造成硬直的能力等级。分为等级0~4,分别对应不同的空手、轻武器、重武器、巨大武器。(黑魂中一共13的等级,其中最高等级指代强制打出硬直、击倒、击飞) 但如果考虑到越阶打怪,比如`筑基打金丹`,那使用冲击力系统,`冲击力-1`即可,光使用韧性比较难。 ### 运行规则 黑魂的硬直产生使用`冲击力等级-强韧度等级`进行判断(如果韧性打空强韧度-1): - `=`0:产生小硬直 - `>`0:产生中硬直 - `>`1:产生大硬直 我们对此进行简化,在受到攻击后: - 角色韧性>100,不会出现硬直。 - 0<角色韧性<100,产生小硬直。 - -100<角色韧性<0,产生中硬直。 - 角色韧性<-100,产生大硬直。 产生硬直后,角色就会恢复所有韧性。如果产生了大硬直就可以进行`处决`。 ## 受击状态 产生硬直会播放对应的动画,并且打断当前动作(攻击、施法、互动动作),除此之外: - 小硬直:人形生物可使用翻滚等移动技能强制解除该硬直;怪物摇晃一下。 - 中硬直:人形生物可使用一些强行受身技能强制解除该硬直;怪物摔倒。 - 大硬直:人形生物无法使用技能解除硬直;怪物长时间瘫痪。 特殊受击状态会得到`易伤debuffer`根据类型: - 击飞:可追加空中追击技能,持续浮空。落地后会有落地保护。(PVP需要) - 击倒:持续时间比中硬直长。 ## 其他说明 ### 武技与蓄力攻击 在黑魂中武技与蓄力攻击都给附带临时的冲击力提升。 我们对此进行简化为:附带临时的削韧提升。 ### 霸体 黑魂中的霸体是直接提高强韧度等级来实现的。 对此我们简化为,直接提升临时的韧性。 ## GAS实现 - 添加Debuffer.ReduceTough标签与GE,GE中Tough的计算使用GameplayEffectExecutionCalculation(考虑到功法、武器对其的影响) - 添加一个名为RecoverTough的GE,使用OriginTough属性来overrideCurrentTough - 修改Status.Stiffness标签,分为成Status.Stiffness.Action、UnderAttack、Attacked,3种硬直,硬直大小使用等级表示,0代表无硬直、1代表小硬直、2代表中硬直、3代表大硬直。(做这步时最好git Commit,因为修改标签会知道一些Asset引用失效,这些标签主要引用在连击GA、受击GA、硬直GE) 目前有2种实现当角色Tough削减至一定数目后,给角色添加硬直Debuffer。 ### 属性集PostGameplayEffectExecute()实现 在PostGameplayEffectExecute()中对Tough进行监视,在函数中写编写判断公式当符合条件时对角色应用对应等级硬直GE。同时在动画蓝图通过监视GameplayTag函数UAsyncTaskGameplayTagAddedRemoved来设置变量以起到播放动画的目的。 ### 使用GA实现 因为受击系统主要逻辑都写在GA中,所以将硬直逻辑写在GA里或许会更好。 在GA激活时,使用AsyncTaskAttributeChanged(可能再做个AbilityTasks会比较好)来监视Tough属性的变化,如果达到指定情况就应用对应的硬直GE。同时在动画蓝图通过监视GameplayTag函数UAsyncTaskGameplayTagAddedRemoved来设置变量以起到播放动画的目的。