配置

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. Linux内核入门到放弃-页缓存和块缓存-《深入Linux内核架构》笔记

    内核为块设备提供了两种通用的缓存方案. 页缓存(page cache) 块缓存(buffer cache) 页缓存的结构 在页缓存中搜索一页所花费的时间必须最小化,以确保缓存失效的代价尽可能低廉,因为 ...

  2. [Oracle维护工程师手记]为什么flashback 的时候既需要 flashback log ,又需要 archive log?

    为什么flashback 的时候既需要 flashback log ,又需要 archive log 呢? 如果数据库的活动不是很频繁,可以看到,其flashback log 是比较小的.那么是通过怎 ...

  3. 互怼、IPO、雷潮、寒冬,2018 互联网圈的那些事儿

    有了人的地方,就会有江湖. 有江湖的地方,就会有门派. 有门派的地方,就会有纷争. 有纷争的地方,就会有兴衰. 2018年马上就要离我们远去了,迎接我们的将会是新的一年——2019年.在整个过去的20 ...

  4. 三十、小程序解析HTML(对富文本返回数据的处理)

    1.首先需要下载插件wxParse 下载地址 https://github.com/ZCLegendary/WXNews 百度云盘有保存 WXML <import src="../.. ...

  5. Centos6.6安装docker

    今天在虚拟机上体验一下docker, 操作系统:Centos6.6 内核版本:2.6 1. https://download.csdn.net/download/dujiaoyang000/10872 ...

  6. 周末学习笔记——day01(函数,函数对象,嵌套调用,名称空间,作用域,闭包,装饰器)

    一,复习 字符编码 文件头:py2—ASCII,py3—UTF-8 三种字符串:u' ' b ' ' r ' ' u' ' .endcode(' utf-8 ') b' '.deconde(' utf ...

  7. delete *p可以替代delete[] p吗?

    在stackoverflow看到一个标题描述的问题,问题链接是:https://stackoverflow.com/questions/55524140/is-delete-p-an-alternat ...

  8. mysql-笔记-数据类型

    https://dev.mysql.com/doc/refman/5.7/en/numeric-type-overview.html serial: SERIAL is an alias for BI ...

  9. fedora上安装ffmpeg

    环境 fedora26 1. 安装 yasm sudo dnf install yasm yasm-devel -y 2.安装 ffmpeg 官方下载ffmpeg源码  ( http://ffmpeg ...

  10. koa-session 记录当前会话内容

    最近做毕设需要在nodejs服务器下记录当前用户账号,所用的node框架是koa,所以相对应配套的用了koa-session,发现和之前学的session差不多,都是会话级别的. 一.session和 ...