本文主要是介绍UnrealEngine蓝图进阶学习笔记(五):生命增减死亡,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
本次记录(终于)记得启用了Mackdown标题功能,发现四#标题与粗体字大小适用于大标题,五#字体大小相当于粗体适用于小标题,此后一并沿用;
在该节中实现角色及敌人生成并承受伤害的功能,一并实现各角色触发死亡后的事件处理,及增加了回血道具;
一、创建生命值与受害伤害功能
1.创建变量
在角色及敌人蓝图创建变量Health(浮点,值100),MaxHealth,(点亮,浮点,值100)IsDead(布尔)至角色类;分别编辑事件图表初始化生命值;
2.分别创建函数ReduceHealth
3.编辑事件图表
此时测试项目将分别显示生命值,且伤害系统正常运行,测试完毕后删除PrintString节点;
二、死亡判定与死亡动画的触发
4.分别编辑人物蓝图的事件图表
5.分别编辑动画蓝图的事件图表
获取死亡状态并保存至蓝图本地;
6.人物动画蓝图编辑动画图表
新建死亡状态机并编辑
注意勾选掉死亡动画的Loop设置
7.人物动画蓝图编辑状态机转换线
双击以上状态机中转换线的双向箭头
8.蜘蛛动画图表编辑
此处蜘蛛动画中带有蒙太奇片段指定,故不方便在状态机中加入死亡动画(追踪
攻击动画仍会无条件触发);添在动画图表加BlendPosesByBool节点;右侧拖拽死亡动画(注意勾选掉Loop循环);
此时测试项目发现角色与蜘蛛死亡后均能触发死亡动画,但也仍可移动与射击;
三、角色与敌人死亡后的初步处理
设置死亡后移动、瞄准、冲刺、射击等功能均禁止使用;
9.编辑死亡状态判断宏
人物蓝图及蜘蛛蓝图中均新建宏IsDeadMacro;
10.应用该宏
在事件图表中除手柄输入、初始化生命值外模块中均插入宏(包括判断键盘输入模块、开火模块、冲刺模块、判断冲刺射击最大值模块、应用伤害值模块),连接其false引脚;
在蜘蛛蓝图中仅判断伤害处引用
11.设置停火状态时的死亡设置
考虑到开火时死亡的状态,将停火节点StopFiringWeapon拖拽至(应用伤害并判断死亡状态模块)设置IsDead变量后;
12.设置蜘蛛的死亡设置
编辑CanAttack函数,添加死亡状态判断;
编辑蜘蛛死亡后设置,在(应用伤害并判断死亡状态模块)设置IsDead变量后停止移动并渐变退场且延迟销毁Actor(ReverseFromEnd节点);(可将渐变入场处Play节点改为PlayFromStart节点)
此时测试项目,玩家死亡后停止一切功能实现(但仍可播放收枪音效),但蜘蛛将继续攻击;蜘蛛死亡后Actor被销毁则不再检测碰撞,玩家可在地图自行移动(不销毁则阻拦地图不可移动);
四、完善死亡后收枪音效逻辑
13.为收枪音效触发设置条件
编辑StopFiringWeapon函数,添加条件分支,添加函数输入引脚PlayStopFiringSound;
在函数处点击右键,查找所有引用,编辑勾选播放的条件;
第三处(死亡状态)引用不能简单的勾选,应判断下死亡时是否为开火状态,若为则停火并播放收枪音效,否则不播放;
此时测试项目角色死亡时收枪音效播放正常,不再有可继续开火收枪的bug;
五、事件分发器的介绍与使用
13.新建事件分发器PlayerDead
所有订阅该派发器的Actor都将跨蓝图接受此派发器发送的消息;拖拽事件分发器至蓝图,选择调用;
14.绑定事件分发器
创建CastToBP_ShootSpider_player,BindEventToPlayerDead,AddEvent(添加自定义事件)节点;或在CastToBP_ShootSpider_player节点引脚搜索AssignPlayerDead引出后两节点;新建IsPlayerDead变量;
六、完善敌人使其不再攻击死后的玩家
15.调用玩家死亡状态
人物死亡后蜘蛛继续进行攻击,可选择在蜘蛛蓝图中添加停止攻击蒙太奇的节点,也可选择在动画蓝图中每帧判断条件并停止;此处选择后者解决;在动画蓝图中敌人参照右键搜索GetIsPlayerDead提升成变量;
16.停止攻击玩家动作
考虑在攻击蒙太奇播放中玩家死亡的状况,在动作图表中新添加BlendPosesByBool节点;
此时测试项目,玩家死亡后蜘蛛的攻击动作停止并保持静止;但攻击音效还在继续播放;查找发现此时一直符合蜘蛛攻击的条件,修改蜘蛛的攻击函数,bug解决;
七、给敌人死亡添加Ragdoll布娃娃效果
17.修改碰撞设置
碰撞预设选中Ragdoll,再选回Custom自定,勾选Visibility;
18.启用布娃娃效果
新建SetRagdollEffect函数;SetSimulatePhysics节点启用模拟物理;AddImpulse(添加冲量)节点提供冲击力(引脚分别为施加目标、冲击力方向、施加骨骼、是否改变速度,改变时忽略质量提供更好的打击效果);GetSocketRotation(获取插槽旋转);GetForWardVector(获取向前向量)节点;
19.调用该Ragdoll效果
编辑事件图表,添加死亡后行动事件
八、角色低生命值时的音效播放
20.创建自定义事件LowHealthNotice
将事件节点挂载到节点链上
21.创建播放音效函数
PlayLowHealthSound函数
StopLowHealthSound函数:
22.编辑事件图表
编辑死亡后事件
九、加血道具的创建、掉落与拾取
在“Blueprints-Pickups”中新建Actor蓝图BP_HealthTool;选中“Effects-Pick-ups”中十字形道具在蓝图中自动添加为粒子组件并作为根节点;添加Sphere Collision球性胶囊体,z轴上移50;
添加点光源,z轴上移50;颜色改为橙色;衰减半径改为500;
拾取道具功能:仅给主角加血、满血时不拾取、拾取后增加血量、增加拾取声音、销毁道具本身;
22.改变人物蓝图事件图表
将HeahthChange事件放置于Reduce Health函数中 ;
23.创建加血函数
新建AddHealth函数
24.编辑道具蓝图
25.编辑蜘蛛蓝图
新建SpawnHealthTool函数,提升变量DropFrequercy;节点SpawnActor(From Cast) NONE;
编辑事件图表
此时测试项目,蜘蛛死亡后原地生成道具,非满血状态下拾取可加血;
总结:
(1).触发伤害及死亡功能
应用伤害功能通过EventAnyDamage节点应用伤害值并改变生命值起效,判断生命值为0时设为死亡状态,由此条件触发死亡后一系列事件;
在动画蓝图中尝试获取Pawn拥有者->类型转换为Player->设置为玩家类型的参数->引用参数GetIsDead值获取人物实时状态并播放相应动作;再其动画图表中通过Locomotion编辑状态机切换总览(Movement到Dead状态);在具体状态机中则编辑其输出的动画;
编辑状态机间的转换线可为状态切换设置条件;
在动画蓝图的动画图表中,使用BlendPosesByBool(按布尔混合姿势)节点实现以IsDead参数确定输出动画的效果;
(2).蜘蛛死亡事件
蜘蛛死亡后相续触发DeactiveAlMovement节点停止Al的移动,使用ReverseFromEnd节点实现渐变退场的动画,并用DestoryActor节点延迟销毁该Actor;
(3).事件分发器
事件分发器犹如流平台上的频道,对订阅该频道的用户事件分发器将实时跨蓝图通知指定的触发事件,此处用来向蜘蛛通知玩家死亡的事件;
在玩家蓝图中死亡事件中调用PlayerDead分发器;
在蜘蛛蓝图中使用BindEventToPlayerDead(绑定事件到PlayerDead)节点绑定接受玩家死亡的通知,并在事件引脚处新建自定义事件PlayerDead,设置IsPlayerDead变量值;
在蜘蛛蓝图中则通过蜘蛛敌人参照引出GetIsPlayerDead提升成变量以获取角色死亡信息;继而在动画蓝图中由该变量及BlendPosesByBool(按布尔混合姿势)节点实现玩家死亡后停止攻击的效果;
(4).Ragdoll布娃娃效果
布娃娃效果作用于骨骼网络体,使之可收到指定向量力的冲刺展示击退效果;需要在蜘蛛蓝图的视图中编辑碰撞预设,在Ragdoll效果中将Visibility勾选;
SetRagdollEffect函数中实现击退效果,主要使用SetSimulatePhysics节点启用模拟物理;AddImpulse(添加冲量)节点提供冲击力;其中通过获取玩家指定插槽获取方向向量并放大指定倍数来施加冲击力度;
(5).低生命值的音效通知
低生命值时相应音效的触发由自定义事件实现,创建出LowHealthNotice事件后及可在事件图表的节点链中以函数形式挂载使用;具体事件变现则放置于该自定义事件节点后,比如判断生命值大小并通过DoOnce节点单次播放濒死音效,恢复高生命值后重置DoOnce节点以便下次音效的触发;
(6).添加可拾取道具
新建蓝图设置骨骼网络体并在蓝图中赋予胶囊体于光源;
(在事件开始重叠节点链后)实现该道具的效果:
1.仅给主角加血:通过IsPlayer函数判断碰撞体是否为玩家,否则置假;
2.满血时不拾取:转换为玩家类型并get到目前生命值与最大值,相等时True引脚置空;
3.拾取后增加血量:从人物蓝图中拖取AddHealth节点于道具蓝图中实现;
4.增加拾取声音::PlayerSound2D节点生成播放指定音效;
5.销毁道具本身:通过DestoryActor节点实现;
设置该道具的出现场景(蜘蛛死亡后概率掉落):
新建SpawnHealthTool函数,使用分支节点中及随机浮点数与指定小数变量实现概率生成拾取道具的效果;与SpawnActor BP_HealthTool节点与GetActorTransfor节点获取原地位置在原地生成道具;
将该函数挂载与蜘蛛死亡的事件,实现死亡后生成;
这篇关于UnrealEngine蓝图进阶学习笔记(五):生命增减死亡的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!