UnrealEngine蓝图进阶学习笔记(四):敌人设置

tip:PrintString节点可快捷在场景中打印提示字符提示信息;

在场景中对角色出生点按end键(需开启NumLock锁)可让其尽可能严丝合缝的贴近地面或物体;

敌人设置:

一、创建蜘蛛敌人与敌人动画

1.于"blueprints-character-Als"创建人物蓝图BP_ShootSpider_Enemy,于mesh骨骼中指定SK_Greater_Spider网络体,缩放于(0.5,0.5,0.5)移动至(0,0,-90)旋转(0,0,-90);编辑组件顶部胶囊体(碰撞检测器),在顶部视图中相应改变其半径;(胶囊体考虑射击高度故不对蜘蛛高度进行适配)

2.于“Characters-Enamys-Spider-Animations”中创建动画蓝图ABP_ShottSpider_Enemy,下方选择Spider骨骼;编辑AnimGraph,新建NewStateMachine(状态机)节点命名为Locomotion与之连接;

3.在内容编辑器新建混合空间BS_ShootSpider_EnemyMovemont选择Spider骨骼,双击编辑,坐标轴Direction轴值设置为(-180,180),Speed轴值设置为(0,375),在人物蓝图BP_ShootSpider_Enemy中编辑其最大速度为375;编辑混合空间;

  • ​ 底部五点设置为Idle动作;

  • ​ 顶部中间设置为walk_Fwd,两边设置为walk_Bwd;顶部左边设置为left,右边设置为 right;

4.编辑动画蓝图ABP_ShottSpider_Enemy,引用刚创建的混合空间命名为EnemyMovemont,连接;

5.打开玩家的动画蓝图ABP_Player,将事件图表中的动作同步到蜘蛛动画蓝图的事件图表中(新建节点EventBlueprintBeginPlay,castToBP_······);函数同步复制(变量需重设,或者在复制过来的灰色变量节点上右键创建);
在这里插入图片描述
在这里插入图片描述
GetSpeed函数:
在这里插入图片描述
GetDirection函数:
在这里插入图片描述
将变量挂载到混合空间节点上:
在这里插入图片描述

二、使用ConstructionScipt实现敌人的随机颜色

6.编辑人物蓝图BP_ShootSpider_Enemy的ConstructionScript(类似于构造函数,于每次生成物体时调用);调入mesh节点引出createDynamicMaterialInstance节点,材质选择spider;编辑蓝图如图

setVectorParameterValue(设置向量参数值)节点由拖拽引出,HolographicColor(此处已有所出入,材质命名自定义为BasicColor);

setScalarParameterValue(设置标量参数值)节点同拖拽,Emissive,值设250;

此时拖入蜘蛛入场可实现随位置随机变色,而运行时将不再变色;

在这里插入图片描述

7.(控制蜘蛛入场时由透明逐渐显色)添加TimeLine时间轴节点,双击添加浮点轨道Opacity,0.5秒完成变化,左上角适配坐标轴,按住Shift添加两点于对角线,右键选择auto模式形成曲线;

在这里插入图片描述
8.编辑时间图表,生成SetScaleParameterValueonMaterial(在材质上生成标量参数值)节点及0到0.6数值的lerp插值节点;

考虑到timeline本身可作为组件于事件图表中调用,故不在事件开始图表后接入,而在后续调用时直接引入其组件(也可用于反向透明度变化);
在这里插入图片描述
三、使用Al MoveTo创建简单的追击行为

9.ALMoveTo节点带有时钟,不能用于函数;pawn拖拽引用自身;Al需要导航网格来保持运行,在体积中选中导航网格体边界体积拖入场景,位置归零,笔刷大小设置为(5100,5100,500);快捷键按P将显示场景中可进行移动的区域;

在map中将角色上移则不会提早触发地板材质的分配;

此时测试蜘蛛无法播放移动动画,在人物蓝图中对骨骼继承动画类后解决;

而蜘蛛接触到角色后不再次追踪,则在蓝图中创建循环不停触发该动作;
在这里插入图片描述
调整蜘蛛胶囊体组件的碰撞设置,可见Pawn类型对于射线的碰撞检测是忽略的,则修改为custom类勾选碰撞;此时测试射击蜘蛛将有射线碰撞的检测

四、创建用于攻击动画的蒙太奇

ue中动画蒙太奇(简称蒙太奇)是一种多功能工具,通过它可以实现多种动画效果,主要与公开代码或 蓝图可视脚本中的动画控件相关。它也可用于创造各种动画效果,包括动画的智能循环,基于逻辑的动画切换,等等。

10.新建蒙太奇AM_ShootSpider_EnemyAttack;在蒙太奇轨道下拉项可调出插槽管理器;分别创建片段,在右侧面板调节第一个片段速度;Notify轨道可添加动画声音和触发事件;新建Attack通知和PlaySound,后者引用MenuBack_Stereo_Cue音效;其他两个片段同理;

五、触发攻击动画的蒙太奇

11.编辑ABP_ShootSpider_Enemy蓝图AnimGraph,搜索slotDefaultSlot插槽节点(读取该插槽中所有蒙太奇,此处仅一份攻击动作剪辑);
在这里插入图片描述
12.在BP_ShootSpider_Enemy蓝图中创建DamagePlayer函数,创建ApplyDamage函数;变量值设置10;(蜘蛛攻击十次玩家致死)
在这里插入图片描述
13.在ABP事件图表中搜索新建AnimNotify_Attack节点(在剪辑片段中触发通知时将调用此节点),调用以上函数;
在这里插入图片描述
14.创建函数IsPlayerInAttackRange并归类于Attack类(均勾选常量与纯函数)
在这里插入图片描述
IsAttacking函数(均勾选常量与纯函数)
在这里插入图片描述
CanAttack函数(均勾选常量与纯函数)
在这里插入图片描述
GetRandomAttackMontageSectionName函数(均勾选常量与纯函数)
在这里插入图片描述
15.编辑事件图表
在这里插入图片描述
此时测试项目,蜘蛛持续短间隔内对角色攻击,且可边移动边攻击;由下节改善;

六、攻击时不移动与逃离攻击距离功能

16.创建函数DeactiveAlMovement
在这里插入图片描述
创建函数ActiceAlMovement
在这里插入图片描述
编辑事件图表,在开始动画前停止移动,攻击完成后重新激活激动;
在这里插入图片描述
17.新建函数IsPlayerEscapeAttackRange,参数扩大两倍;
在这里插入图片描述
编辑修正DamagePlayer函数:
在这里插入图片描述
此时经测试发现有总是循环第一段攻击动画蒙太奇的bug,调整default轨道顺序后解决;
在这里插入图片描述

总结:

(1).复习了混合空间BS_ShootSpider_EnemyMovemont相关的设置,快捷设置相关动作;通过在动画蓝图ABP_ShottSpider_Enemy引用刚创建的混合空间,用GetSpeed和GetDirection函数传参至混合空间完成动画的设置;
此后则通过创建动画蒙太奇AM_ShootSpider_EnemyAttack快捷实现动画的播放,蒙太奇中还可调用通知与音效;最后使用slotDefaultSlot插槽节点读取该插槽中所有蒙太奇;而AnimNotify_Attack节点则可在剪辑片段中触发通知时实现后续事件的触发;

(2).编辑ConstructionScipt在初始化实例时实现了敌人随机颜色分布,复习了TimeLine时间轴节点实现了透明度的变化;

(3).ALMoveTo节点中Al需要导航网格来保持运行;在delay延迟节点后重接入到该节点则实现持续实时向玩家移动;此后还通过StopMovement、deactive、active节点控制Al的状态(在攻击前停止移动,攻击完成后恢复移动状态);


版权声明:本文为Qiblank原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。