19_190~198SmaterEnemyes
190 IK Rig for the paladin圣骑士的IK Rig
Retargeting Animations from the paladin to echo从圣骑士到回声的重定向动画
将Paladin的受击动画,使用IK重定向给Echo
选择根,然后选择全局缩放


191 Echo Hit React MontageEcho Hit React蒙太奇
Setting up the Hit React Montage for Echo为Echo设置Hit React蒙太奇
创建了一个HitReact的Montage
给Montage添加了标签 音效

192 Echo Gets HitEcho得到击中
Implementing Get hit for Echo实现Echo的Get hit
将GetHit_Impon方法 已送到了BaseCharacte类中
并在EchoCharacter中进行了覆写
193 Hit Reaction State命中反应状态
Taking Care of Hit Reaction State for Echo照顾Echo的命中反应状态
添加了一个状态

在受击方法中,将状态置为HitReaction

在受击蒙太奇中,添加一个HitReactEnd的通知
在EchoCharacter中添加一个BlueprintCallable的方法HitReacEnd
在这个方法中,将受击状态重置为stay


回到ABP动画蓝图中添加方法

敌人死亡时,武器依然会造成伤害
需要关闭敌人武器的碰撞

需要在敌人进入战斗时清除巡逻的计时器

194 Improving Directional Hit React改进定向命中反应
Basing Hit React on the Attacker's Location以攻击者的位置为基础的打击反应
我们在攻击敌人产生击退的时候,使用Player的坐标,比使用Import的坐标更好,避免从正前方击中敌人后备,敌人反而向我们移动
给GetHit方法添加了一个参数 AActor* Hitter
修改HitInterface.h

修改BreakActor类


修改BaseCharacter,并且将DirectionalHitReact中,ImpactPoint替换为Hitter的坐标


修改EchoCharacter

修改Enemy

修改weapon

在测试中发现,如果当player在进行攻击动作时被打断
也就是说当执行了EnableBoxCollision操作后,因为被打断,没有执行DisableBoxCollision,所以玩家的武器会一直带有“伤害”
我们需要在被打断时,直接执行DisableBoxCollision
在EchoCharacter的GetHit_Implementation方法中加入设置

195 Root Motion Attacks根基运动攻击
Improving the Enemy's Attacks提高敌人的攻击力
敌人在攻击我们的时候,会出现自己释放动作,但是不会追踪我们的位置,或者不会矫正
添加了3个带位移的攻击动画
196 Motion Warping
Addin a Motion Warping Component
运动翘曲
添加一个运动翘曲的组件
添加Motion Warping插件

打开enemy的蓝图,添加motion warping插件

在动画蒙太奇中,添加Motion片段,覆盖根动画位移的部分
然后在片段下方,添加一个触发motion的通知
设置Root Motion Modifier为Skew Warp
设置Wearp Targe Name,设置下面Rotation Type 为Facing

回到C++中,
将Enemy类中的AActor* CombatTarget 暴露给蓝图,以便在蓝图中调用
这里其实是在设置warp目标的对象,Enemy的对象肯定是player,就是类中的CombatTarget

在角色蓝图中,添加一个自定义事件,用来触发motion
WarpTargetName这里对应了montage动画中设置的Wearp Targe Name,这个需要保持一致

然后我们继续到montage动画中设置一个通知,然后在动画蓝图中,用这个通知调用这个自定义蓝图事件
我们可以多设置几个通知,这样角色在进行动画时,可以调整方向朝向玩家

在动画蓝图中添加通知事件
在角色动画蓝图中,添加通知事件,用来出触发角色蓝图中的自定义事件

操!敌人太强了!
当敌人在进行montage动画时被攻击,会发现击退动画后会继续播放剩余的montage动画
所以我们需要在enemy被命中的方法中,使用montage_stop方法终止montage动画的播放

197 Fixing Warp Targets修复经纬度目标
Perfecting the Enemy Attack完善敌人的攻击
先解决了 enemy默认状态 死亡的情况,因为Dead是第一个,被蓝图设置为默认值,所以我们需要将NoState设置为第一个,这样他就会被设置为默认值,enemy就不会躺地上了

创建两条Motion Warping通知条

我们用一条命名为TranslationWarp,来勾选Warp Translation 和 Igone ZAxis,来表示只对位置进行变化
用另外一条命名为RotationWarp,只勾选Warp Rotation,来表示只对旋转进行变化

然后我们创建两个函数
GetTranslationWarpTarget()用来传递坐标,因为我们不想让enemy直接落在玩家的位置上,而是距离玩家一个指定的距离WarpTargetDistance
当这个值越小,离玩家就越近
所以我们需要用向量减法来获得标准向量
然后乘以距离WarpTargetDistance

GetRotationWarpTarget() 用来传递旋转,因为我们不需要对旋转进行修改,所以这里直接return
在Enemy的蓝图中,tick方法如下:


