连续的路面
- 平面等非移动物体设置为Navigation Static,在Inspector视图或Navigation视图中。
-
为要寻路的物体添加Nav Mesh Agent组件 ,设置半径、高度、速度、加速度、距离目标的停止距离。
-
Navation/Bake 下设置Agent的参数
参数 | 作用 |
---|---|
半径 | 半径越小,网格越大 |
高度 | 高度决定能否穿过“洞” |
斜坡斜度 | 决定能通过的斜坡的斜度 |
台阶高度 | 不能大于人的高度 |
Drop Height | 允许下落最大高度 |
Jump Distance | 允许最大跳跃距离 |
-
给移动的物体添加脚本,获取 NavMeshAgent 组件,然后通过 以下函数设置导航的目标位置
NavMeshAgent nagent; public Transform targetpos; nagent = gameObject.GetComponent<NavMeshAgent>(); nagent.destination = targetpos.position;
离散的路面
使用Off Mesh Link组件,首先完成上面的操作。注意在Nav Mesh Agent中勾选上Auto Traverse off Link。
自动创建OffMeshLink
-
选中路面,在Navination视图中点击object下的Generate OffMeshLink。所有路面都要添加,不然只能从一端到一端。
-
在Bake下调节jump distance。
出现连线则成功
手动创建OffMeshLink
在一个物体上添加Off Mesh Link组件,选择start和end。
出现物体之间的双向连线
网格分层
设置不同的地形可否通过情况
- 在Navigation视图中的areas下,输入要设置的地面的名称。
- 选中要设置的地面,然后在Navigation视图中,Object下的Navigation Area选择对应的area
- Bake
- 选中要移动的物体,在层次面板中,Nav Mesh Agent下的Area Mask选择可以通过的地面
-
通过脚本控制
Navigation Areas下的标签,按照二进制1或0决定能不能走,二进制位从右到左依次是第一个标签到最后一个标签。
NavMeshAgent agent; myagent = gameObject.GetComponent<NavMeshAgent>(); agent.enabled = true;//组件启用 agent.areaMask = -1 ^ 1 <<6;//启用Navination Areas下的第六个标签 agent.areaMask |= 0x8;//启用第四个标签 agent.areaMask &= ~0x18;//禁用第四个第五个标签
网友评论