配置

Navigation

Crowd Manager Class 代理人管理类 可以自定义个

Navigation System

  • Auto Create Navigation Data 导航数据在没有的情况下自动生成并有边界
  • Allow Client Side Navigation 允许客户端单边导航
  • Initial Building Locked 最初构建锁定,如果设置为ture将导致导航系统不重建直到调用ReleaseInitialBuildingLock() 为止
  • Skip Agent Height Check when Picking Nav data 跳过代理人的高度验证在采集导航数据时
  • Data Gathering Mode 数据收集模式,即时、懒惰 。。没其他介绍
  • Dirty Areas Update Freq 脏区域更新频率

Navigation Enforcing

Generate Navigation Only Around Navigation Invokers 生成导航时仅在导航周围调用,如果启用整个界都可导航,导航网格数据将停止使用,使用导航draw就可看出效果

Active Tiles Update Interval 激活瓦片更新频率

Agents

Supported Agents 支持的代理人

Default Query Extent 导航查询范围:以Actor为中点向外扩展,如果范围内有导航就使用

Agent的SetupHeight:越高矮的东西越过的越多。

NavigationMesh AgentSlope:高坡生成的导航会影响,还和Radius相关

寻路原理

NavMeshBoundVolume可选择代理(Agents)生成导航网格数据,未选的代理不会生成数据,代理可调颜色,瓦片大小,代理人步高,半径之类的。

Pawn会自动设置自身代理数据半径,在寻路时依自身代理半径寻找相近的寻航网格数据进行寻路。

原代码解读寻路

GameplayTask,AITask,AITask_MoveTo, static AIMoveTo,这是UE的任务架构,那些要一步步完成的逻辑可利用任务架构完成。

寻路功能就是任务架构完成的。结果存于Task中,和以前夺回颜色写那个寻路的执行类似,这个变成了task形式。

问题:

能不能按半径寻路? 能

不同的代理人有什么作用? 不同的代理人生成不同的导航网格数据。

代理与寻路组合的使用方式? 不同的导航网格数据可供不同半径角色使用。

移动组件与导航配合

UMovementComponent >> UNavMovementComponent

NavigationSystem 方法 SimpleMoveToLocation 会 GetNavDataForProps(NavAgentProperties)

UNavMovementComponent 里有 NavAgentProperties

NavAgentProperties:描述寻路代理人的数据结构

程序开始后 NavigationSystem 调用 OnWorldInitDone 执行 RegisterNavData 到 AgentToNavDataMap里

TMap与寻航

作为TSet的继承,使用Hash来配对,对于一些自定义的数据结构,也会自定义GetTypeHash。

利用重载,GetTypeHash实现了不同类型的数据结构自定义Hash值被TSet使用。

inline uint32 GetTypeHash(const FNavAgentProperties& A)
{
return ((int16(A.AgentRadius) << 16) | int16(A.AgentHeight)) ^ int32(A.AgentStepHeight);
}

Character与寻航

Character 使用34,88 初始化CapsuleComponent,之后 CharacterMovement->UpdateNavAgent(*CapsuleComponent),NavAgentProperties数据会被设置。

在下一个TICK

编辑器赋与capsule的值改变capsule,但UpdateNavAgent不会再执行了,所以会造成导航代理不匹配

Default Query Extent

NavAgentProperties里没有这个属性

Default Query Extent 默认查询范围,和 ProjectPointToNavMesh 有关。投影点到导航网格。因为有时指定的点可能不在导航网格上。

UPathFollowingComponent 组件

在移动组件寻找导航代理配置,根据配置值找导航网格数据,根据导航网格数据找路径,将路径送给UPathFollowingComponent 组件。

Pawn与寻航

Pawn里有UpdateNavAgent,移动组件的 NavAgentProperties 在 PAWN 里初始设置的值会被覆盖(步高不会被覆盖)。于PostInitializeComponents。

Pawn的半径会和导航设置的不相同,NavigationSystem GetNavDataForProps会找导航数据,没有就找半径相近导航数据使用。

NavModifierVolume

可以给不同的导航区域(NavModifierVolume)设置费用。可以在搜索时利用区域费用作为筛选条件(NavigationQueryFilter)。

https://blog.csdn.net/haisong1991/article/details/80505850

其他

引擎配置重启才能更新

UNavMovementComponent的NavAgentProps会被赋值,哪怕bUpdateNavAgentWithOwnersCollision设为false,这是为什么呢?

当前的解决方案:在BeginPlay后再赋值于NavAgentProperties

UE导航系统详的更多相关文章

  1. JMeter学习-023-JMeter 命令行(非GUI)模式详解(一)-执行、输出结果及日志、简单分布执行脚本

    前文 讲述了JMeter分布式运行脚本,以更好的达到预设的性能测试(并发)场景.同时,在前文的第一章节中也提到了 JMeter 命令行(非GUI)模式,那么此文就继续前文,针对 JMeter 的命令行 ...

  2. CSS3 transform 属性详解(skew, rotate, translate, scale)

    写这篇文章是因为在一个前端QQ群里,网友 "小豆豆" (应他要求要出现他的网名......) ,问skew的角度怎么算,因为他看了很多文章还是不能理解skew的原理.于是,我觉得有 ...

  3. AVL树详解

    AVL树 参考了:http://www.cppblog.com/cxiaojia/archive/2012/08/20/187776.html 修改了其中的错误,代码实现并亲自验证过. 平衡二叉树(B ...

  4. C++构造函数详解及显式调用构造函数

    来源:http://www.cnblogs.com/xkfz007/archive/2012/05/11/2496447.html       c++类的构造函数详解                  ...

  5. C++中构造函数详解及显式调用构造函数

    C++构造函数详解及显式调用构造函数                                         c++类的构造函数详解                        一. 构造函 ...

  6. MySQL 索引详解大全

    什么是索引? 1.索引 索引是表的目录,在查找内容之前可以先在目录中查找索引位置,以此快速定位查询数据.对于索引,会保存在额外的文件中. 2. 索引,是数据库中专门用于帮助用户快速查询数据的一种数据结 ...

  7. GLSL-几何着色器详解跟实例(GS:Geometry Shader)[转]

    [OpenGL4.0]GLSL-几何着色器详解和实例(GS:Geometry Shader) 一.什么是几何着色器(GS:Geometry Shader) Input Assembler(IA)从顶点 ...

  8. MySQL数据库使用mysqldump导出数据详解

    mysqldump是mysql用于转存储数据库的实用程序.它主要产生一个SQL脚本,其中包含从头重新创建数据库所必需的命令CREATE TABLE INSERT等.接下来通过本文给大家介绍MySQL数 ...

  9. Elasticsearch java api 基本搜索部分详解

    文档是结合几个博客整理出来的,内容大部分为转载内容.在使用过程中,对一些疑问点进行了整理与解析. Elasticsearch java api 基本搜索部分详解 ElasticSearch 常用的查询 ...

随机推荐

  1. 关于Docker开通远程访问端口2375

    一.使用版本:docker for windows 18.06,安装过程略,具体如下: 二.开通远程访问端口2375,只需要设置一下即可,如下图:

  2. 数据类型:list列表[]、元祖tuple()、dict字典{}

    List 列表[] 可变的 lst = [1,2,3,4] #改 lst[(元素下标)] = '需要修改的' #通过下表修改 lst[下标:下标] = '需要修改的' #通过范围修改 #加 lst.a ...

  3. 洛谷P4431

    题意翻译 题目大意: 给定一个n∗m的矩阵,每次你可以选择前进一格或转弯(90度),求在不出这个矩阵的情况下遍历全部格点所需最少转弯次数.有多组数据 输入格式: 第一行一个整数k,表示数据组数 以下k ...

  4. 分治FFT的三种含义

    分治FFT是几个算法的统称.它们之间并无关联. 分治多项式乘法 问题如求\(\prod_{i=1}^na_ix+b\). 若挨个乘复杂度为\(O(n^2\log n)\),可分治做这件事,复杂度为\( ...

  5. [第二届构建之法论坛] 预培训文档(C++版)

    本博客是第二届构建之法论坛暨软件工程培训活动预培训文档中[适用于结对编程部分的C++版本],需要实验者有一部分C++基础. 目录 Part0.背景 Part1.配置环境 Part2.克隆项目 Part ...

  6. 【学习总结】GirlsInAI ML-diary day-10-if条件执行

    [学习总结]GirlsInAI ML-diary 总 原博github链接-day10 认识if条件执行 一般条件执行 分支执行 链式条件执行 嵌套条件执行 1-if一般条件执行 格式:如果(满足这个 ...

  7. Java的selenium代码随笔(4)

    //高亮操作元素public void highlight(WebElement webElement) {JavascriptExecutor javascriptExecutor = (Javas ...

  8. 离线安装IE 11

    转自:http://blog.sina.com.cn/s/blog_711ab1b10102wzq1.html 1.在D盘下,新建文件夹,取名为“ie”. 2.将官网下载的IE11离线包放到此文件夹中 ...

  9. CSS3选择器p:nth-child和p:nth-of-type之间的差异

    稍微自己理解了一下,感觉就是:nth-of-type似乎有种族歧视,界限划分很清晰.在同一个国家(父级)中的时候,nth-of-type指认自己人排名,nth-child全都算在内排名,阿T的要求真的 ...

  10. git 原理

    1.git基本原理 2.git提交代码到远程仓库 3.远程仓库同步到本地 git pull #等同于下面命令 git fetch git merge 3.提交代码是冲突解决 一般提交前先get pul ...