虚幻AI蓝图基础笔记(万字整理)

AI原理

一、三大阶段

AI的处理过程可以分为三大阶段:感知、思考、行动

(1)感知

对AI当前状态作记录。
“基本过滤”也是一种感知行为。
基本过滤 - 如果其他感知的优先级更高,会忽略部分信息

(2)思考

AI利用感知阶段收集到的信息,对当前信息和目标进行评估,为之后的行动指明方向。

(3)行动

根据感知阶段的信息和思考阶段的决策,AI在行动阶段对信息做出相应的行为。
行动阶段结束后,AI会再次回到感知阶段。
行为有可见的,如跳跑;也有不可见的,如通信

二、创造AI角色

一个角色蓝图,一个AI控制蓝图

  • 胶囊体——控制碰撞
  • 网格体——控制骨骼、动画、材质
  • Camera Boom——控制摄像机视图
  • 角色移动组件——控制角色移动、游泳、飞行等动作

在这里插入图片描述

流程

1.制作AI蓝图

a.拷贝第三人称角色蓝图——删掉事件图表中所有的节点(因为AI不需要输入数据)
在这里插入图片描述在这里插入图片描述

b.删除一些与输入有关的变量:“基础转动速率”、“基础俯仰速率”
在这里插入图片描述在这里插入图片描述

c.删除摄像机组件:camera Boom(摄像机升降臂)、跟随相机
在这里插入图片描述

2.AI控制器

a.添加AI控制器 - 替换刚刚删除的玩家控制器的功能

b.建立AI控制器蓝图
在这里插入图片描述在这里插入图片描述在这里插入图片描述

c.打开AI_ThirdPersonCharacter蓝图——PAWN——AI控制器类——绑定AI控制器蓝图
在这里插入图片描述

三、寻路

AI需要信息和数据才能在场景中移动并躲避障碍。
在场景中寻路是AI的基本功能,不仅仅是从A-B点。

(一)寻路原理

  • 计算路径
  • 躲避障碍
  • 寻路网格体 - 用于帮助AI在场景中寻路。网格体由大量凸多边形组成,规定了哪些区域AI可以通过。
    在这里插入图片描述
  • 预计算数据

寻路网格体都是预先计算(“烘焙”)好的,这意味着在游戏开始前,以2D网格体形式表示的寻路网格体就已经包含了场景对象和AI自身生成的碰撞数据。这就使得寻路的开销更低。对于那些代理数量或类型不确定的实时体验来说,这点尤为明显。

添加寻路网格体Actor

为了让AI使用预计算数据。
流程

  • 模式 - 寻路网格体(Nav Mesh Bounds Volume)拖入场景 - “细节”面板调整笔刷尺寸 -
    让网格体覆盖AI需要行走的场景

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
寻路网格体开销低、速度快、高可靠,可以快速实现导航功能,但是场景无法动态修改寻路网格体。
在这里插入图片描述

(二)配置寻路网格体

1.寻路网格体调整

寻路网格体大小不需要特别准确。
a.显示网格体 :视口选项 - 显示 - 导航(快捷键P)
在这里插入图片描述在这里插入图片描述

b.默认网格体自动更新 - 移动场景物件,寻路网格体会实时更新。若关卡较大,会很耗性能。
c.(仅对较大关卡)关闭自动更新 - 编辑器偏好设置 - 关卡编辑器 - 杂项 - 关闭自动更新导航
在这里插入图片描述

d. 手动更新 - 构建 - 导航 - 构建路径(无需在意日志里的错误消息)
在这里插入图片描述

2.使用RecastNavMesh调整寻路网格体部分属性

创建寻路网格体时,Recast寻路网格体自动创建。
选中RecastNavMesh,在细节面板调整。

  • 绘制偏移 - 抬升或降低寻路网格体。不会改变网格体实际位置,只是改变视觉效果。(对被遮挡的区域显示很有帮助)
    默认为10。

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

  • 导航修改器体积(Nav Modifer Volume) - 不会生成任何几何体。

在这里插入图片描述
在这里插入图片描述

  • 导航网格体障碍 - 表现某片区域难通过。AI不会优先选择这个路径。不会移除导航网格体。

在这里插入图片描述

  • NavArea_Null - 移除导航网格体,无法通过


在这里插入图片描述

  • NavArea_LowHeight - 在高度不足的地方使用。无法通过。

在这里插入图片描述

  • NavArea_Default - 可以通过。

在这里插入图片描述

(三)导航网格体代理

如果想要尺寸更大、游泳、飞行的角色,只需要定义新的寻路网格体代理,并进行相应设置以适应新的尺寸和运动形式。

  • 代理 - 场景中任何形式的自主实体。这里泛指AI角色。
  • 在RecastNavMesh中调整代理参数,可打开AI蓝图的胶囊体参数对照调整。
    在这里插入图片描述
  • 代理高度 - 会出现高度不够,但是可以通行的状况。修改后,变为不可通过区域。
    在这里插入图片描述在这里插入图片描述
  • 增加代理类型和数量:项目设置 - 引擎 - 导航系统 - 代理

在这里插入图片描述

四、使用控制器让AI漫游

(一)蓝图编写漫游逻辑

给角色蓝图新建一个自定义事件,包含随机漫游逻辑 - 增加一个函数,在游戏中反复调用自定义事件
流程
a.AI行动
打开AI角色蓝图 - 在“事件图表”窗口右键创建“自定义事件custom event”,命名为“random wander随机漫游”- “随机漫游”后跟“到Location的简单移动Simple Move To Location”函数
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

  • “到Location 的简单移动”的两个参数:
    • Controller - 角色的控制器。
    • Goal - 用向量表示的目标位置。
  • Get controller - 会获取所绑定的对象,并返回该对象的控制器。

b.“Get controller获取控制器”函数返回值与“到Location的简单移动”的controller参数连接。
在这里插入图片描述

  • “Get Random Reachable Point In Radius获取半径内能到达的随机点”参数:
    • Origin起点
    • Radius半径 - AI能到达的范围
  • “Get Actor Location获取Actor位置” - 默认为自己。

c.随机漫游
“获取半径内能到达的随机点”起点为当前AI的位置:“获取Actor位置”函数的返回值连接origin - 调整半径为1000 - 返回值与“到Actor的简单移动”的Goal参数连接。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

d.定时器循环
创建“begin play”事件 - 连到“set timer by event以事件设置定时器”函数 - random wander随机漫游事件连到“以事件设置定时器”函数的event引脚,设置开始时间time,勾选looping循环

在这里插入图片描述
在这里插入图片描述

运行游戏,AI会在1.5s后随机漫游

(二)寻路网格体和GamePlay调试器

游戏运行后,按“’”打开控制台。

  • 可在项目设置 - 引擎 - 输入 - 控制台,添加快捷键
    在这里插入图片描述

Gameplay debug“调试器”:检验AI能否在游戏中正确使用寻路网格体。
运行游戏,按快捷键弹出Gamplay调试器,可以看到寻路网格体在不断更新
在这里插入图片描述

左上角 - 对应按键

  • 9
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值