Unity寻路报错“SetDestination“ solo se puede llamar en un agente activo que se haya colocado en un NavMesh.

Este error indica que el nodo donde se encuentra NavMeshAgent no está ubicado en la cuadrícula de búsqueda de ruta. Este error suele ir acompañado de

"No se pudo crear el agente porque no está lo suficientemente cerca de NavMesh"类似警告。

Indica que la creación del agente de búsqueda de ruta falló, y la configuración posterior del destino definitivamente conducirá a la falla.

Tales problemas deben ser revisados:

  1. Si NavMeshAgent está habilitado al llamar a SetDestination
  2. ¿Existe NavMeshSurface?

Si todo está configurado correctamente, pero aún así informa este error. Felicitaciones, me he encontrado con el mismo problema ~

Nunca encontré este error en el Editor o en el APK de prueba (si lo encontré, debo haber encontrado una manera de resolverlo ~), y cuando se lanzó el proyecto, descubrí que bugly informó mucho de este error. Me dejó muy desconcertado. Afortunadamente, encontré el código fuente de NavMeshAgent y encontré una forma un poco más segura de evitar errores.

Una de las funciones más importantes en la búsqueda de rutas de agentes es la función para evitar obstáculos. Unity utiliza un administrador de desvíos grupales (Administrador de multitudes de desvíos) para administrar el agente. La premisa de que podemos llamar a SetDestination es que nuestro Agente se agrega a este administrador de omisión. Hay varias formas de desencadenar el comportamiento de adición:

  1. Los cambios de NavMeshSurface, como Obstáculos para cavar agujeros, activarán este comportamiento.
  2. NavMeshAgent::OnEnable intentará agregar
  3. Llamar a NavMeshAgent::Warp agregará

El primer comportamiento desencadenante debe modificar la cuadrícula de búsqueda de rutas, el segundo lo llama el sistema y el último lo podemos desencadenar nosotros mismos.

Aquí puede verificar si configura la transformación donde se encuentra su Agente para usar transform.position directamente?

Si es así, es fácil de manejar, reemplace la forma de modificar las coordenadas por transform.position para modificar usando agent.Warp.

 De esta forma, al añadir al sistema de desvío, también se modificarán las coordenadas de la transformada.

En cuanto a por qué sucede esto, supongo que no tuvo éxito al agregar Detour Crowd por primera vez, y hay muchas razones para la falla, porque es imposible depurar, por lo que solo puedo tener este tipo de suposición. Errores posteriores causados ​​por no volver a activar este comportamiento de adición. Pero al menos, usar Warp para establecer las coordenadas directamente puede garantizar que no habrá errores.

Supongo que te gusta

Origin blog.csdn.net/weixin_36719607/article/details/126711102
Recomendado
Clasificación