zoukankan      html  css  js  c++  java
  • UE4 行为树与EQS

    行为树

    • 需要创建AIController蓝图,使被AI控制的模型

    • 黑板:存放变量

    • 行为树:执行逻辑

    • NavMeshBoundVolume:AI移动的范围,需要创建导航网格设置移动范围,(查看NavMesh的快捷键:P)

    • 行为树是从上到下,根节点向下执行,是从左到右执行相同层次的节点

    • 这是一个简单的行为树

    Composites:Selector,Sequence,SimpleParallel

    Selector(选择):Selector 节点从左至右执行其子项,其中一个子项达成后将停止执行其子项。如 Selector 的子项达成,则 Selector 也达成。如 Selector 的所有子项未达成,则 Selector 未达成。
    Sequence (序列):节点从左至右执行其子项,如其中一个子项未达成,将停止执行执行其子项。如子项未达成,则 Sequence 也未达成。如 Sequence 的所有子项均达成,则 Sequence 也达成。
    (感觉Selector和Sequence的区别就在于是 ”或“ 和 ”且“ 的关系)
    SimpleParallel(并行):所有子节点都运行一遍。
    

    Decorators,Services,Tasks

    Services: 定时执行一个操作,通常在根节点下的selector中执行,可以定时检查操作,常用于检查和更新黑板
    Decorators:条件语句,附着雨一个Composite或者Task节点,并定义树中的一个分支或单个节点是否可以执行
    Tasks:Task 是真正“执行”操作的节点,如移动 AI,或调整黑板值。
    
    • 播放动画

    • 首先设置好动画蓝图,人物运动动画来回切换,然后通过行为树修改人物设置的状态,通过行为树执行播放相应的动画

    • UE4处理并发行为的三个优点

    明确:使用服务节点和简单平行节点创造的树更简明,易于观察和理解。
    调试简单:图表更清晰,便于纠错。此外同时执行路径更少,更易于观察正在执行的内容。
    更易于优化:由事件驱动的图表如果没有同时执行大量子树,将更易于优化。
    

    EQS

    • EQS全称:Environment Query System,官方介绍是给虚幻提供给AI,用于收集环境数据测试分析,寻找到最符合测试的结果,EQS帮助AI筛选玩家的位置信息,将周围进行打分,选最高分或最低分,给AI选择更合的结果。

    • 开启Edit–Editor Preferences–搜索框EQS,然后勾选“Environment Querying System”,然后AI框里会多一个EQS蓝图

    • 测试节点介绍

    Distance:距离测试节点,将选择器选取的点用给予和参照内容进行距离测试。距离越远则分值越大,如果希望越近分值越大请调整Score中的Scoring Equation,将线性递增改为递减(Inverse Linear)。
    Dot:使用点乘的方式,为选取点打分,值域范围0-1(点乘有负数,打分无负数,正面为1,背面为0,呈现扇形左右递增向1)。也可以对结果进行绝对值设定(勾选Absolute Value,结果为点乘后绝对值值域0-1,正面1,背面1,左右两边0)。点乘中的向量选取可以使用两点方式或是Rotation方式。
    Gameplay Tags:使用标签进行询问测试(GamePlay Tags本身是为Actor查询操作提供分层,一般用于查询。关于GT使用,我后期会出一篇文章介绍)
    Overlap:在采样点,使用通道检测方式,返回是否有符合通道标记的内容存在。如存在返回1,反之返回0。检测形状,Box,Sphere,Capsule。用于检测查询某一个点附近是否存在某一样东西。
    Pathfinding:将采样点与内容进行导航寻路器测试,可达则分数1,不可达为0。它将用于最终测试点生成,返回一个可达测试点。
    Pathfinding Batch:将采样点与内容进行导航寻路器测试,可达则分数1,不可达为0。它会返回所有可达点,供下个测试项目使用。
    Project:投射测试。可以用来修正生成器采样点位置。两种模式:导航投射,在采样点为基准,垂直向上向下进行导航检测,碰到导航覆盖点则修正采样点位置。形状检测,不考虑导航,只要在通道碰撞成立,则修正采样点到新的位置。
    Trace:射线测试。用来测试采样点,到Context参照点之间是否存在遮挡,这是重要节点,一般可以用来寻找可以用来躲避的采样点(从采样点到敌人之间存在遮挡则认定可以躲避)。存在遮挡分数为1,不存在为0。注意:需要考虑高度问题,采样点一般均在地面,从地面直接发射射线到Context可能会出现被非常矮的物体阻挡,可以通过调整Height Offset解决此问题。
    

    总结

    • EQS可以和行为树相结合使用,可以实现更好的AI逻辑,相对减少了工作量,EQS内容相对较少,但是理解不是那么容易,需要手动操作实践。
  • 相关阅读:
    SQL联合查询(内联、左联、右联、全联)的语法
    java动态代理(JDK和cglib)详解
    javascript通过className取得dom集合
    hibernate的各种保存方式的区别 (save,persist,update,saveOrUpdte,merge,flush,lock)等
    Quartz的cron表达式
    DDL语言详解
    键、索引、约束及其区别 理解
    存储过程详解
    求ios开发流程及学习方法
    java接口详解以及与抽象类区别
  • 原文地址:https://www.cnblogs.com/biu-we/p/13604795.html
Copyright © 2011-2022 走看看