问:
Unity【3D】中事件添加 NavMeshAgent发现没有
答:
在Unity 3D中使用NavMeshAgent(导航网格代理)组件进行AI路径规划和寻路时,需要确保场景中有NavMesh(导航网格)。如果在添加NavMeshAgent组件时发现没有这个组件,常见的原因有:
1. 场景中没有导航网格。需要在场景中添加导航网格(修改器-导航网格表面),或选择已有的地形/网格等来自动生成。只有在存在导航网格的情况下,NavMeshAgent组件才会显示在组件列表中。
2. NavMeshAgent组件所在的GameObject没有与NavMesh表面碰撞的Collider组件。这可以是BoxCollider,MeshCollider, TerrainCollider等,需要添加一个Collider来检测与NavMesh表面的碰撞,NavMeshAgent组件才会生效。
3. 确保在将导航网格应用到游戏对象(生成NavMesh)后,NavMeshAgent所在的GameObject处于默认层。非默认层的GameObject不会被NavMesh包含,所以能见度也会出问题。需要设置GameObject的Layer为Default。
4. 导航网格的Bake中Taget对象不包含NavMeshAgent的GameObject。 bake导航网格时,需要选择包含需要设置AI的GameObject,勾选Used By NavMesh。Bake完成后NavMeshAgent才会显示并生效。
5. NavMeshAgent参考transform被禁用。若NavMeshAgent指定了参考Transform(Agent Transform),参考对象需要保持active状态,否则NavMeshAgent不工作。
6. NavMeshAgent处于禁用状态。若NavMeshAgent的Enable状态被关闭,需重新勾选启用此组件。
综上,添加NavMeshAgent组件前,需要确保场景中有可用的NavMesh,并使NavMesh与NavMeshAgent的gameObject有效碰撞。组件本身的设置也需保证处于活动工作状态,与参考物体的连接也保持有效。只要一一检查确保以上条件,就可以成功添加和使用NavMeshAgent组件。