UE4 导航网格的使用

在使用导航网格前,应先设置项目导航系统支持的导航代理者(Agents)

在项目设置中,找到导航系统页面

DirtyAreasUpdateFreq 表示导航网格变化时,检测变化并更新的频率。

 

这里可以设置导航系统的一些参数,包括是否允许客户端导航, 支持的导航代理者(Agents)

根据支持的导航代理者类型,导航网格会生成不同的RecastNavMash,以支持不同代理者。

代理者的参数如下

Name:就是自定义用的类型名

Color:控制生成的绘制导航网格的颜色

Defalut Query Extent这个还不清楚是干什么的,一般不用管

Navigation Data class 一般不用动

Nav Agent Radius: 这个是代理者的半径, 通常与所需代理的Acter的pawnMovement类型组件中的Nav Movement 类别中设置同名变量大小一致的。

Nav Agent Height: 这个是代理者的高度, 通常与所需代理的Acter的pawnMovement类型组件中的Nav Movement 类别中设置同名变量大小一致的。

Nav Agent Step Height: 这个是代理者可以行走的台阶高度,通常与所需代理的Acter的pawnMovement类型组件中的Nav Movement 类别中设置同名变量大小一致的。

Nav walking Search Height Scale  暂时不清楚干什么的,一般不用管

preferred Nav Data 这个也不是很清楚干什么的。一般不用管

这几个好像设置了没用, 只有在Acter的pawnMovement类型组件中的Nav Movement 类别中设置同名变量设置了才有用。而且这几个参数并不仅仅只影响导航,而是对所有的movement都有用。这几个选项,只是用于说明可以进行什么行为,并不会在自动寻路时,自动实现跳跃,蹲下等。从高处跳下,可以使用Nav Link Proxy 来指导

 

然后,还要设置项目设置中的导航网格物体

这一页中,主要是设置导航网格在生成RecastNavMash时的一些通用设置。

display类型 重要是用来显示用的。

Generation 控制生成网格的一些设置。 主要的需要修改的设置如下

Agent Radius:在导航系统页签中,如果没有设置support Agents的化,会使用这里的设置

Agent Height:在导航系统页签中,如果没有设置support Agents的化,会使用这里的设置

Agent Max Height:在导航系统页签中,如果没有设置support Agents的化,会使用这里的设置,具体是什么,没有搞清楚。

Agent Max Slope: 生成RecastNavMash时,所允许的斜坡的最大角度。

Agent Max Step Height: 生成RecastNavMash时,所允许的最大楼梯高度。

 

 

这些可以在生成的RecastNavMash中重新设置。

 

这里有一个bug,就是在项目设置中修改的support Agents 的一些变化,必须重启项目才能更新。

 

 

在NavMeshBoundsVolume的Navigation选项中,选择需要支持的Supported Agents。则在生成导航网格时,会根据指定的类型,生成不同的导航网格(RecastNavMash)。

在导航网格中,可以指定不同的运行时网格生成机制。

第一种,是静态的。

第二种,在导航修改器(Nav Modifier)发生改变时动态修改。仅当Nav Modifier Volume 类型的物体发生改变时,才会更新网格。

第三种,是动态的修改。所有会影响导航的物体改变位置都会更新。

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
UE4中生成程序化网格,您可以使用蓝图和C++两种方法: 使用蓝图: 1. 创建一个Actor,并在其上添加一个静态网格组件。 2. 在蓝图编辑器中,创建一个新的蓝图,并将其设为Actor的子类。 3. 在蓝图中,添加一个Construction Script事件,并连接该事件到一个Sequence节点。 4. 在Sequence节点中,添加一个创建StaticMeshComponent的节点,并将其连接到该Actor的RootComponent上。 5. 添加一个用于设置StaticMeshComponent网格的节点,并将其连接到创建StaticMeshComponent节点上。 6. 添加一个用于设置StaticMeshComponent材质的节点,并将其连接到创建StaticMeshComponent节点上。 7. 添加一个用于设置StaticMeshComponent位置、旋转和缩放的节点,并将其连接到创建StaticMeshComponent节点上。 8. 在Construction Script事件中,添加一个For循环节点,并将其连接到Sequence节点。 9. 在For循环节点中,添加一个用于计算网格位置、旋转和缩放的节点,并将其连接到Sequence节点。 10. 将Sequence节点连接到For循环节点的Body输出。 11. 在蓝图中添加一个自定义事件,并将其命名为GenerateMesh。 12. 在GenerateMesh事件中,添加一个用于生成网格的节点,并将其连接到Sequence节点。 13. 使用Actor蓝图来创建Actor,并调用GenerateMesh事件以生成程序化网格使用C++: 1. 创建一个继承自Actor的C++类,并添加一个静态网格组件。 2. 在C++类中,创建一个构造函数,并在其中添加StaticMeshComponent的创建、设置网格、材质和位置、旋转和缩放的代码。 3. 创建一个用于生成网格的函数,并在其中添加计算网格位置、旋转和缩放的代码。 4. 调用生成网格函数以生成程序化网格。 无论您选择哪种方法,都可以使用蓝图或C++来生成程序化网格。这将使您能够动态地创建和修改网格,以实现更多的交互和自定义效果。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值