• 26_ue4进阶末日生存游戏开发[僵尸添加动画和扣血效果]


    给僵尸npc添加动画和扣血效果

    首先新建一个动画文件夹

     新建一个动画蓝图

     一般只要是不做汽车啊等模型,我们一般选Animinstance

    因为僵尸是女英雄,所以我们选择女英雄的动画

     重命名Zombie_animationBP

    进入动画蓝图,创建一个状态机

     重命名为default,并连线

     我先选了三个站立的动作,当僵尸速度为0 的时候,我们希望这三个动画随机播放。

     在动画蓝图的默认状态机里面添加一个状态节点,名字为Idel

     

    进入这个状态节点

    添加一个随机序列播放器节点

    添加三个元素

     将每个动画放进去

     

     如果我们想让哪个动画播放的概率大一点,我们就将概率权重调大一点。

    我们从1变成了3

    连线之后,idel状态就做好了

    现在我们再把走路和奔跑的动画复制过来

     

    新加walk状态节点

     进入节点,把walk动画拖进去。

    然后剩下的动作过程比较复杂,僵尸先魅惑玩家,然后奔跑,最后攻击的混合动作。

    添加了魅惑和攻击的动作。

     添加魅惑,奔跑,攻击节点(注意状态的过度)

     进入节点,添加一个状态机

    然后进入状态机,新建三个状态节点 ,僵尸是先魅惑,然后奔跑,然后是进攻与奔跑的切换。

    kiss和run里面只有一个动画,Attack里面依然采用随机播放多个动画

    -----------------------------------------------------------------------------------------------------------

    接下来就是设置各种状态节点的转化了。

     kiss到run的状态切换条件是,kiss动画播放了80%就可以切换了,要给动画留一个过度的时间。

     点击这个过度条件

     

     

    其他的状态条件需要变量来驱动。

    我们创建一个枚举数据。

     

    在枚举里面添加四个变量,对应四个状态

    这样的好处是,我们可以在僵尸蓝图里操控这个枚举变量。

    进入僵尸蓝图,增加一个枚举类型的变量。

     

    -------------------------------------------------------------------------------------------------------

    下一步工作就是让动画蓝图得到对应的pwan中的变量。

    首先,当动画蓝图初始化的时候,得到拥有这个动画实例的僵尸pwan的引用。

    动画的每一帧,我们都去获得僵尸pwan中的状态枚举。

     

    现在我们就可以设置状态之间的转化了

    idel到walk,枚举等于walk就可以转化

     进入攻击的时候要先魅惑和奔跑,所以将枚举等于run的时候,就开始魅惑了

     同理,进入攻击节点是这样的。

    --------------------------------------------------------------------------------------------------------------------

    在行为树里驱动这些变量。

    新建任务,该任务是用来修改僵尸状态的。

     覆写方法和创建变量

    通过自身变量设置僵尸的状态枚举变量

     给这个任务重命名:BTT_SwitchState

     补充一下,这个任务中的变量的眼睛要点亮。

     添加状态转变任务,值设置为run

     

     打开僵尸蓝图的mesh,选择僵尸蓝图。

    测试:当僵尸发现我们之后,一边魅惑一边飘过来,这是因为转换状态的任务一瞬间就完成了,接着就开始move to的任务了。

    解决思路:这两个任务中间加一个等待任务,等待时间就是魅惑动画的时间长度。

    我们是等待了3.5s

    当僵尸 移动到目标1米5的地方,他的移动任务就完成了,然后就开始进行攻击。

    在进攻的过程中,僵尸与玩家角色的距离要不断检测。

     所以我们要新建一个服务来检测距离,名字叫BTS_CheckDistance

     

    覆写函数并新建变量

    得到角色与僵尸的距离

     在僵尸蓝图里增加一个变量攻击距离

    默认值改为100

     在黑板里面增加变量InAttackRange,布尔型的,表示目标是否在攻击范围内。

    在新建服务中也添加相应变量

     在新建的服务中,判断是否到达攻击范围

     将结果赋值到黑板

    在这个节点运行我们的服务 

     

    调整参数

     

     把这个移动任务的参数调到20.

    我们把这个左子树拆分成右子树和左子树

     为两个顺序节点添加装饰器,用是否在攻击距离这个变量

    左右分别这么设置

     

     调整攻击距离检测服务频率

     --------------------------------------------------------------------------------------------------

    下面开始解决各种bug

    第一僵尸巡逻等待的时候不能站立。

    这里添加一个过度

      在行为树加上这个任务节点,将状态改成idel

     

    设置动画过度效果,如果行走的位移比较短,行走与站立的动作交替时间就会短,如果两个动画的过度时间太长,那么行走的动画就不明显,看起来像没有走路往前飘,所以我们缩短过度的持续时间,可以让行走的效果看起来更明显。

    两个过度时间都缩到0.1s

    现在僵尸没有办法随时面向主角,我们新建一个任务BTS_RotateTorwards,让他攻击主角的时候,自动转向

    还是添加变量+覆写函数

    首先得到target的location

    得到僵尸的位置

     得到僵尸面向玩家位置的朝向时的转向。

     设置僵尸的转向

     执行成功

    添加任务

     --------------------------------------------------------------------------------------------------------------------

    现在对僵尸的攻击附加伤害。僵尸打下来的一瞬间进行扣血。

    首先为两个攻击动画分别找到扣血的点

    这一帧我们认为会造成打击

     新建一个通知,并命名

     

     动画2也是找到攻击的瞬间

     选择我们刚刚创建的通知

     

    回到动画蓝图,我们就可以创建makedamage的事件了

     

     

     在僵尸蓝图中创建自定义事件makedamage

    新增一个actor类型的变量,命名为AttackTarget

     

     

    再创建一个伤害值变量,初始值设为10

     连线

     在行为树里面新建一个攻击任务,命名为BTS_attacktarget

    还是先覆写,再添加参数

     

     将黑板中的actor变量赋值给僵尸的攻击对象

     在动画蓝图中,通知造成伤害

    修改树的结构,并添加设置伤害任务 节点

     

     最后将主角hp进行更新

     测试成功。

  • 相关阅读:
    【第五篇】商城系统-商品属性管理
    Java 开发从零开始,java 基础入门传智播客网页版,Java 后端路线图
    软考高级信息系统项目管理师系列论文四:论信息系统项目的成本管理
    第4章 决策树
    Word控件Spire.Doc 【图像形状】教程(1) ;如何在 Word 中插入图像(C#/VB.NET)
    基于Look-Ahead技术的机器人速度控制策略
    内存池泄露
    【力扣】42. 接雨水
    Navicat导入Excel数据顺序变了
    word批量图片导出wps office word 图片批量导出
  • 原文地址:https://blog.csdn.net/zhang2362167998/article/details/126095924