UnrealEngine蓝图进阶学习笔记(七):创建巡逻全场的Al钥匙

UnrealEngine蓝图进阶学习笔记(七):创建巡逻全场的Al钥匙

2020.04.04

清明假几天可以一直码蓝图真好,再加把劲就把这项目做完了,虽然以后面试还得好好把这些功能再整理一遍,不过总算有个成果能拿出手了~

此节生成Al钥匙,每段时间进行无目的移动;钥匙打中后定格在原地,玩家在附近破解完毕后钥匙带玩家进入下一关;

一、创建进入下一关的钥匙

1.设置钥匙材质

创建Character蓝图BP_ShootSpider_EnterKey;在组件Mesh中添加三个静态网格体组件,取名Core、FrameOut、FrameIn;分别设置静态网格体为key3、key1、key2;材质设置为Block及Glow;全选缩放(1.25,1.25,1.25)

添加SphereCollision命名为Trigger,球体半径设为150;

2.为钥匙设置动画效果

添加时间轴AnimTimeLine,勾选自动播放和循环;FrameRotate和CoreLocation轨道;FrameRotate轨道添加两点(0,0)(5,360),CoreLocation轨道添加三点(0,0)(2.5,1)(5,0)
UnrealEngine蓝图进阶学习笔记(七):创建巡逻全场的Al钥匙_第1张图片
编辑蓝图,创建SetRelativeRotation(设置相对旋转)节点,lerp(向量插值)节点;注意轨道与引脚顺序
UnrealEngine蓝图进阶学习笔记(七):创建巡逻全场的Al钥匙_第2张图片
编辑胶囊体预设
UnrealEngine蓝图进阶学习笔记(七):创建巡逻全场的Al钥匙_第3张图片

二、自定义Al Controller与黑板、行为树、EQS坐标

3.自定义AlController

蓝图新建搜索class中AlCrontroller命名为BP_Shootspider_EnterKey_Al;
UnrealEngine蓝图进阶学习笔记(七):创建巡逻全场的Al钥匙_第4张图片

编辑钥匙蓝图Pawn设置
UnrealEngine蓝图进阶学习笔记(七):创建巡逻全场的Al钥匙_第5张图片

右键内容管理器,在人工智能处将三个蓝图均创建一次,黑板BP_Shootspider_EnterKey_Blackboard(存放Al的数据用来和其他工具沟通),环境查询BP_Shootspider_EnterKey_EOS(查找场景数据),行为树BP_Shootspider_EnterKey_Behavior(定义各种行为的判断);

三、使用EQS系统按距离随机检查坐标点

4.编辑EOS场景查询

拖拽根选择Grid网格查询;

新建蓝图EQSTestingPawn,拖拽至场景;编辑EQS为以上类,则场景中可见该网格;(查询完后删除该蓝图)
UnrealEngine蓝图进阶学习笔记(七):创建巡逻全场的Al钥匙_第6张图片
编辑大小及间隔使网格正好覆盖地图;添加距离测试(0,5000),(得分因数为1时Al更倾向于移动的绿色区域呈现于外围,为-1时Al倾向于内围),调节得分等式为平方根,数据绑定为相对于得分,标准化类型为相对于等分,使绿色覆盖范围尽可能大;
UnrealEngine蓝图进阶学习笔记(七):创建巡逻全场的Al钥匙_第7张图片

四、综合使用黑板、行为树与EQS钥匙

5.使钥匙随机寻路闲逛

编辑黑板数据,设置为向量类型;
UnrealEngine蓝图进阶学习笔记(七):创建巡逻全场的Al钥匙_第8张图片

编辑行为树(节点运行自上而下自左而右),添加Selector节点(该节点下一个行为成功了该选择节点即为成功,都失败了则为失败),添加Sequence节点(该节点以上所有节点都成功才算成功,一个失败则为失败);

添加EQS查询节点,选择前25%的单一随机项(否则极小概率出现总为某一点);
UnrealEngine蓝图进阶学习笔记(七):创建巡逻全场的Al钥匙_第9张图片
添加移动和等待节点
UnrealEngine蓝图进阶学习笔记(七):创建巡逻全场的Al钥匙_第10张图片

6.编辑Al蓝图

UnrealEngine蓝图进阶学习笔记(七):创建巡逻全场的Al钥匙_第11张图片

测试:将钥匙蓝图置入场景运行,Shift+F1并点击弹出,可在场景中移动查找到此点;

五、在特定敌人波次中混入钥匙的生成

7.设置钥匙生成位置

编辑游戏模式,添加函数GetAllRocks,提升变量
UnrealEngine蓝图进阶学习笔记(七):创建巡逻全场的Al钥匙_第12张图片

新建SpawnEnterKey函数;编辑SpawnWave函数,调用钥匙生成函数;
UnrealEngine蓝图进阶学习笔记(七):创建巡逻全场的Al钥匙_第13张图片

新建GetRandomRock函数获取岩石位置,编辑,勾选纯函数和常量;
UnrealEngine蓝图进阶学习笔记(七):创建巡逻全场的Al钥匙_第14张图片

编辑SpawnEnterKey函数,获取岩石位置并在合适位置生成
UnrealEngine蓝图进阶学习笔记(七):创建巡逻全场的Al钥匙_第15张图片

六、给钥匙增加生命值与受伤功能

8.编辑钥匙生命系统

编辑钥匙蓝图,新建变量Health、MaxHealth、IsDead,创建函数Reduce,
UnrealEngine蓝图进阶学习笔记(七):创建巡逻全场的Al钥匙_第16张图片
编辑事件蓝图,DetachFromControllerPendingDestroy(从控制器分离待销毁)函数节点使钥匙脱离Al控制;
UnrealEngine蓝图进阶学习笔记(七):创建巡逻全场的Al钥匙_第17张图片
UnrealEngine蓝图进阶学习笔记(七):创建巡逻全场的Al钥匙_第18张图片
设置生命值
UnrealEngine蓝图进阶学习笔记(七):创建巡逻全场的Al钥匙_第19张图片

七、给钥匙增加被破解功能

9.创建相关变量

新建变量CrackTime、MaxCrackTime(值为7)、IsPlayerOveraying(布尔)、IsInteracted(布尔)、IsPlayerDead(布尔);
UnrealEngine蓝图进阶学习笔记(七):创建巡逻全场的Al钥匙_第20张图片

创建函数AddCrackTime、ResetCrackTime、CanCrackKey;

编辑事件图表,绑定Assign PlayerDead事件;
UnrealEngine蓝图进阶学习笔记(七):创建巡逻全场的Al钥匙_第21张图片

10.编辑破解相关函数

编辑CanCrackKey函数判断是否能破解,勾选纯函数和常量;
UnrealEngine蓝图进阶学习笔记(七):创建巡逻全场的Al钥匙_第22张图片
编辑AddCrackTime函数
UnrealEngine蓝图进阶学习笔记(七):创建巡逻全场的Al钥匙_第23张图片

编辑ResetCrackTime函数重置破解状态
UnrealEngine蓝图进阶学习笔记(七):创建巡逻全场的Al钥匙_第24张图片

编辑事件图表调用破解函数,最后使用打印字符串节点调试;
UnrealEngine蓝图进阶学习笔记(七):创建巡逻全场的Al钥匙_第25张图片

八、映射交互按键

11.添加按键映射

在项目设置中添加交互设置Interact为键盘e值,手柄设置为FaceButtonBottom(正面按钮下);

快捷为触发器添加事件
UnrealEngine蓝图进阶学习笔记(七):创建巡逻全场的Al钥匙_第26张图片

或者在右侧添加相应事件
UnrealEngine蓝图进阶学习笔记(七):创建巡逻全场的Al钥匙_第27张图片

编辑事件图表
UnrealEngine蓝图进阶学习笔记(七):创建巡逻全场的Al钥匙_第28张图片

九、实现蓝图接口与完善钥匙的破解功能

蓝图接口实现各蓝图(比如玩家和道具)间某种操作对应的功能实现

12.完善玩家的蓝图接口

创建Interfaces文件夹放置蓝图接口,新建蓝图接口BPI_Interactable,函数起名OnInteract;具体实现方式在交互蓝图中实现;
UnrealEngine蓝图进阶学习笔记(七):创建巡逻全场的Al钥匙_第29张图片

编辑玩家蓝图,创建InteractTrace函数,SphereTraceByChannel(由通道检测球体)节点,勾选debug选项持续时长;DoesImplementInterface(进行实现接口)节点实现通道的检测;
UnrealEngine蓝图进阶学习笔记(七):创建巡逻全场的Al钥匙_第30张图片
UnrealEngine蓝图进阶学习笔记(七):创建巡逻全场的Al钥匙_第31张图片

13.完善钥匙的蓝图接口

在钥匙蓝图中类设置选项添加实现接口,编译保存;
UnrealEngine蓝图进阶学习笔记(七):创建巡逻全场的Al钥匙_第32张图片

检测接口设置破解状态
UnrealEngine蓝图进阶学习笔记(七):创建巡逻全场的Al钥匙_第33张图片

此时测试运行,击中钥匙并交互7秒破解后显示打印字符;

但出现第一关就出现钥匙的bug,检测钥匙生成处又确实有指定波数的判断,也许得咨询下大佬;

总结:
(1).钥匙网格体的设置

在组件中添加静态网格体并应用网格体素材,可实现一个物体中多个网格体,在时间轴设置相应轨道旋转后还可对不同网格体应用不同的旋转动作;

(2).用行为树设置Al逻辑

自定义AlController中使用EQS查询整个地图坐标并调节Al移动的取值(可使用EQSTestingPawn编辑可视化该地图各点的取值),将此数据记录在黑板中,在行为树中应用查询,将取值赋予到移动位置;最后在Al蓝图中应用该行为树;

(3).生成钥匙

获取全局岩石数组,选用随机岩石位置并在附近生成钥匙,每进入下一关时判断该波数是否生成钥匙;

赋予生命值和伤害系统,使用DetachFromControllerPendingDestroy(从控制器分离待销毁)函数节点让钥匙脱离Al控制;

(4).用蓝图接口实现破解功能

将玩家按键映射于蓝图接口,使用通道检测蓝图接口,其中DoesImplementInterface(进行实现接口)节点实现通道的检测;此时即可引用自定义的蓝图接口节点发送交互消息;

在钥匙蓝图中该接口在事件图表中触发蓝图接口事件,此时可通过设置相关布尔变量值达到某些(破解)功能的实现;

你可能感兴趣的:(虚幻,游戏)