Unity NavMeshObstacle

当navmesh导航网格烘焙好之后,又要想添加阻挡时,就是使用NevMeshObstacle来实现。

1、模型添加NevMeshObstacle就变成了一个动态障碍物,这样在导航网格上,根据模型的大小,挖出一个“洞”,使模型范围内的导航网格消失,这样NavMeshAgent就不能经过次区域了,移动障碍物,会从新挖“洞”。
在这里插入图片描述
2、NavMeshObstacle参数:
(1)、Move Threshold:该参数代表该障碍物的移动的极限距离超过这个参数时,才会重新雕刻这个障碍物。增大此值,障碍物移动没有超过这个距离,就不会重新雕刻导航网格。
(2)、Time To Startionary: 将障碍物视为静止需要等待的时间
(3)、Carve Only Startionary: 当障碍物不断移动时,是否应对其进行雕刻?

3、NavMeshObstacle文档:https://docs.unity.cn/cn/current/ScriptReference/AI.NavMeshObstacle.html

Unity中实现局部避障可以使用NavMesh Obstacle组件。这个组件可以用来创建障碍物,使代理能够预测地避免障碍。当障碍物移动时,代理可以根据障碍物的位置和形状进行动态避障。 以下是一个使用NavMesh Obstacle组件实现局部避障的示例代码: ```csharp using UnityEngine; public class LocalObstacle : MonoBehaviour { private NavMeshObstacle obstacle; private void Start() { obstacle = GetComponent<NavMeshObstacle>(); } private void Update() { // 根据障碍物的移动情况来启用或禁用NavMeshObstacle组件 if (IsObstacleMoving()) { obstacle.enabled = true; } else { obstacle.enabled = false; } } private bool IsObstacleMoving() { // 判断障碍物是否在移动 // 这里可以根据具体的逻辑来判断障碍物是否在移动,例如检测位置变化或速度等 return true; // 返回true表示障碍物在移动 } } ``` 在这个示例中,我们创建了一个名为LocalObstacle的脚本,并将其附加到障碍物的游戏对象上。在Start方法中,我们获取了NavMeshObstacle组件的引用。在Update方法中,我们根据障碍物的移动情况来启用或禁用NavMeshObstacle组件。IsObstacleMoving方法用于判断障碍物是否在移动,你可以根据具体的逻辑来实现这个方法。 这样,当障碍物移动时,NavMeshObstacle组件会启用,代理就会预测地避免障碍。当障碍物静止时,NavMeshObstacle组件会禁用,代理就会将障碍物视为阻塞了所有代理的路径,从而影响全局导航。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值