UE导航系统详
配置
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)。
其他
引擎配置重启才能更新
UNavMovementComponent的NavAgentProps会被赋值,哪怕bUpdateNavAgentWithOwnersCollision设为false,这是为什么呢?
当前的解决方案:在BeginPlay后再赋值于NavAgentProperties
UE导航系统详的更多相关文章
- JMeter学习-023-JMeter 命令行(非GUI)模式详解(一)-执行、输出结果及日志、简单分布执行脚本
前文 讲述了JMeter分布式运行脚本,以更好的达到预设的性能测试(并发)场景.同时,在前文的第一章节中也提到了 JMeter 命令行(非GUI)模式,那么此文就继续前文,针对 JMeter 的命令行 ...
- CSS3 transform 属性详解(skew, rotate, translate, scale)
写这篇文章是因为在一个前端QQ群里,网友 "小豆豆" (应他要求要出现他的网名......) ,问skew的角度怎么算,因为他看了很多文章还是不能理解skew的原理.于是,我觉得有 ...
- AVL树详解
AVL树 参考了:http://www.cppblog.com/cxiaojia/archive/2012/08/20/187776.html 修改了其中的错误,代码实现并亲自验证过. 平衡二叉树(B ...
- C++构造函数详解及显式调用构造函数
来源:http://www.cnblogs.com/xkfz007/archive/2012/05/11/2496447.html c++类的构造函数详解 ...
- C++中构造函数详解及显式调用构造函数
C++构造函数详解及显式调用构造函数 c++类的构造函数详解 一. 构造函 ...
- MySQL 索引详解大全
什么是索引? 1.索引 索引是表的目录,在查找内容之前可以先在目录中查找索引位置,以此快速定位查询数据.对于索引,会保存在额外的文件中. 2. 索引,是数据库中专门用于帮助用户快速查询数据的一种数据结 ...
- GLSL-几何着色器详解跟实例(GS:Geometry Shader)[转]
[OpenGL4.0]GLSL-几何着色器详解和实例(GS:Geometry Shader) 一.什么是几何着色器(GS:Geometry Shader) Input Assembler(IA)从顶点 ...
- MySQL数据库使用mysqldump导出数据详解
mysqldump是mysql用于转存储数据库的实用程序.它主要产生一个SQL脚本,其中包含从头重新创建数据库所必需的命令CREATE TABLE INSERT等.接下来通过本文给大家介绍MySQL数 ...
- Elasticsearch java api 基本搜索部分详解
文档是结合几个博客整理出来的,内容大部分为转载内容.在使用过程中,对一些疑问点进行了整理与解析. Elasticsearch java api 基本搜索部分详解 ElasticSearch 常用的查询 ...
随机推荐
- 数据可视化的开源方案: Superset vs Redash vs Metabase (二)
在上篇结尾处我提到“如果现在让我重新选择,我会使用哪个可视化工具?”我的答案是 Redash,原因主要不是功能层面,而是技术层面.本篇就从项目关注度与活跃度,项目的技术架构,源代码的规模与质量,这三个 ...
- day21(1)---python的内存管理
垃圾回收机制: 不能被程序访问到的数据,就称之为垃圾. 引用计数:引用计数是用来记录值的内存地址被记录的次数的 每一次对值地址的引用都可以使得该值的引用计数+1 每一次对值地址的释放都可以使得该值的引 ...
- pd.read_csv() 、to_csv() 之 常用参数
本文简单介绍一下read_csv()和 to_csv()的参数,最常用的拿出来讲,较少用的请转到官方文档看. 一.pd.read_csv() 作用:将csv文件读入并转化为数据框形式. pd.read ...
- 聊聊计算机中的编码(Unicode,GBK,ASCII,utf8,utf16,ISO8859-1等)以及乱码问题的解决办法
作为一个程序员,一个中国的程序员,想来“乱码”问题基本上都遇到过,也为之头疼过.出现乱码问题的根本原因是编码与解码使用了不同而且不兼容的“标准”,在国内一般出现在中文的编解码过程中. 我们平时常见的编 ...
- JQ——利用一个开关,点击一个按钮完成展开收起功能
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- PhotoShop不用魔棒、钢笔 建立较平整的选区 P进电脑屏幕里
不用魔棒.抽出.钢笔等,还可以直接变形图建立调整选区,这种方法比钢笔抽出感觉简单一些,比魔棒仔细一些. 抽出或钢笔:抽出弄错了偏移了还要擦除,调整笔刷,抽出后可能还有毛边,需要用橡皮擦除: 钢笔,错了 ...
- 字符串格式的方法%s、format和python3.6新特性f-string和类型注解
一.%s msg = '我叫%s,今年%s,性别%s' %('帅哥',18,'男') print(msg) # 我叫帅哥,今年18,性别男 二.format # 三种方式: # 第一种:按顺序接收参数 ...
- stop()在animate中的用法
stop 是jQuery中用于控制页面动画效果的方法.运行之后立刻结束当前页面上的动画效果.stop在新版jQuery中添加了2个参数:第一个参数的意思是是否清空动画序列,也就是stop的是当前元素的 ...
- git 操作命令详解
git 什么是git 开源的分布式版本控制系统, 用于高效的管理大小项目和文件 代码管理工具 防止代码丢失, 做备份 代码版本管控, 设置节点, 多版本切换 建立分支各自开发, 互不影响, 方便合并 ...
- Python3 与 C# 并发编程之~ 进程篇
上次说了很多Linux下进程相关知识,这边不再复述,下面来说说Python的并发编程,如有错误欢迎提出- 如果遇到听不懂的可以看上一次的文章:https://www.cnblogs.com/dot ...