Unity学习日志_寻路系统简介
基础寻路系统(Unity自带的)需要先将地形设置为静态后才可以进行网格烘焙。
Navigation视图:
1. Object:
- Scene Filter:选择要进行烘焙的物体类型。All(可以烘焙所有物体),Mesh Renderers(只可以烘焙带有Renderer的物体),Terrains(只可以烘焙地形)。
- Navagation Static:上面为当前选中物体的名字,此项为设置此物体为导航静态(可烘焙)
- Generate OffMeshLinks:当勾选此属性后,此物体可以在Bake中使用对应的属性:Drop Height,Jump Distance。
- Navigation Area:当前物体烘焙后所在的Area。
2. Bake:
- Baked Agent Size下面:这里是一个展示模板,可以看到下面的属性调整结果。
- Agent Radius:烘焙代理的半径预设值,在unity寻路系统中,物体寻路依靠代理组件实现。该预设值直接决定了多宽的代理组件可以通过。
- Agent Height:烘焙代理高度预设值。该预设值直接决定了多高的代理组件可以通过。
- 注:这里设置的代理信息为一个场景的烘焙值,就好比造桥时需要预先规定一个桥宽和承重。代理组件的信息设置在Agents面板中。
- Max Slope:代理可迈上的最大坡度。
- Step Height:代理可迈上台阶的最高高度。
- Drop Height:下落高度。
- Jump Distance:跳跃距离。
- 注:此两项需要勾选Generate OffMeshLinks才会生效。
- Advanced:
- Manual Voxel Size:勾选后将可以手动输入体素值大小。
- Voxel Size:输入体素值,注:将体素值减半将使内存使用量扩大4倍,烘焙时间延长4倍。
- Min Region Area:网格面积小于此数值的地方将不生成网格。
- Height Mesh:勾选此项将保存网格的高度信息,当然,需要额外的性能和存储空间。
3. Areas:
此界面可以自定义烘焙Area。Cost为此烘焙物体的花费权重。
AreaMask值的设置:AreaMask值采用按位计算,第一层二进制为1,第二层二进制为10,第三层二进制为100。其中0代表Nothing,-1代表Everything。
4. Agents:
此面板属性实际确定代理类型。
Nav Mesh Agent:
实际绑定在寻路物体上的代理组件。
属性:
- Agent Type:代理类型,来源于Navigation中的Agents面板。
- Base Offset:基础偏移,指的是代理边界与游戏物体本身的偏移量。
- Speed:寻路速度。
- Angular Speed:角速度。
- Acceleration:加速度。
- Stopping Distance:寻路到达目的地后与目的地坐标的距离。
- Auto Braking:自动制动。
- Obstacle Avoidance:障碍回避。可以处理当多个代理走同一条路的策略。
- Radius:代理半径。
- Height:代理高度。
- Quality:代理躲避质量。
- Priority:代理优先级,优先级低的代理会给优先级高的物体”让路“。
- Auto Traverse Off Mesh Link:是否自动通过off mesh Link。
- Auto Repath:当原有路线失效后是否重新计算路线。
- Area Mask:当前代理可以寻路的层。
- AreaMask值的设置:AreaMask值采用按位计算,第一层二进制为1,第二层二进制为10,第三层二进制为100。其中0代表Nothing,-1代表Everything。
Off Mesh link:
由于基础组件中烘焙的offweshlink只可以下降,不能上升(想要上升就需要提升代理的Step height),所以有了这个组件
属性:
- Start:起始点。
- End:终点。
- Cost Override:花费重写值,如果为正则此条路的花费变为该值,如果为负,则使用默认的花费。
- Bi Directional:是否双向。
- Activated:是否激活该条路线。
- Auto Update Position:是否自动更新位置,
- Navigation Area:此条路所在area层。
Nav Mesh Obstacle:
unity基础寻路系统中可以实现动态烘焙的组件。
属性:
- Shape:障碍物几何形状,分为方块和胶囊体。
- Center:Shape的中心点坐标。
- Size:Shape的大小。
- Carve:是否在网格中打孔,打孔之后将视为障碍物,而不再是一个代理。
- Move Threshold:移动阈值,障碍物移动多少距离后会重新打孔。
- Time To Stationary:障碍物多久不动会被认为是静止的。
- Carve Only Stationary:是否只在静止时在导航网络打孔。
寻路系统的拓展新功能(需要单独下载):
unity官方更新的寻路组件烘焙时不需要将物体设置为静态。
Nav Mesh Surface:
实现的新特征:
1. 多代理网格烘焙:
为一个物体添加多个不同的surface组件,不同surface可以同时烘焙。
2. 可实现垂直网格烘焙:
基础寻路系统中无法烘焙一个延Y轴旋转90度的Plane,但新组件可以。
3. 脚本控制网格烘焙:
可以通过脚本对一片区域进行实时烘焙,但正常使用时实时烘焙往往采用Local Nav Mesh Builder + Nav Mesh Source Tag的形式。
关于使用脚本控制网格烘焙时如何获取AgentTypeID:
- 使用NavMesh中的GetSettingsByIndex(返回值为NavMeshBuildSetting类型)来获得Navigation视图Agents面板中的某个特定的Agent。
- NavMeshBuildSetting中的AgentTypeID可以直接使用。
private NavMeshSurface _navMeshSurface;
private void Start()
{
//创建一个surface脚本
_navMeshSurface = gameObject.AddComponent<NavMeshSurface>();
//获取想要的AgentID
NavMeshBuildSettings _settings = NavMesh.GetSettingsByIndex(1);
//将AgentID赋值给surface中的agentTypeID
_navMeshSurface.agentTypeID = _settings.agentTypeID;
}
属性:
- Agent Type:代理类型。
- Collect Objects:烘焙范围:有All(所有),Volume(Volume体积区域内),Children(子对象)。
- Include Layers:烘焙所包含的层。
- Use Geometry:烘焙带有XXX的物体,有Render Meshes(烘焙带有Mesh Renderer的物体),Physics Collider(烘焙带有Collider的物体)。
Nav Mesh ModifierVolume:
与NavMeshModifier的不同在于此脚本不再只作用于一个物体,而是一片区域。
Nav Mesh Modifier:
属性:
- Ignore From Build:烘焙时无视此物体。
- Override Area:重写区域。如果勾选此选项,则在烘焙时Area层会采用下面的设置。
- Area Type:设置重写Area层。
- Affected Agents:适用的代理。
Nav Mesh Link:
用户不在需要自行添加起始点和终止点了。
属性:
- Agent Type:适用的Agent。
- Start Point:开始点坐标。
- End Point:终止点坐标。
- Swap:两极反转。
- Align Transform:Transform对齐,将该物体和startPoint,EndPoint对其在一条线上。
- Width:link宽度。
- Cost Modifier:修改花费值,负数代表使用Area默认的值。
- Auto Update Position:是否在开始游戏后动态更新位置。
- Bidirectional:是否双向。
- Area Type:Area类型。
区域动态烘焙:
Local Nav Mesh Builder:
属性:
- Tracked:区域要跟踪的Transform。
- Size:动态区域的大小。