вопрос
Недавно использовалось
NavMeshAgent
Произошла ошибка при запуске проекта функции автоматического поиска пути и атаки монстра"SetDestination can only be called on an active agent that has been placed on a NavMesh"
. Монстр может бегать и атаковать, но не может двигаться вдогонку за противником.
Предварительные условия
В моем проекте карты и монстры генерируются динамически, и
NavMesh
сетка поиска пути также динамически запекается.
решать
Общее решение
- Проверьте, запечена ли карта. Если сетки поиска пути нет, запекайте карту вручную в окне
Nagation
.- Проверьте, находится ли монстр или главный герой в пределах
Navmesh
сетки поиска пути.- Попробуйте использовать
NavMesh.SamplePosition()
методGameObject go = new GameObject("Target"); Vector3 sourcePostion = new Vector3( 100, 20, 100 );//The position you want to place your agent NavMeshHit closestHit; if( NavMesh.SamplePosition( sourcePostion, out closestHit, 500, 1 ) ){ go.transform.position = closestHit.position; go.AddComponent<NavMeshAgent>(); //TODO } else{ Debug.Log("..."); }
Если ни одно из вышеперечисленных решений не решит вашу проблему, то ваша ситуация такая же, как и моя, и решение очень простое:
- Монстр или главный герой динамически генерируется в методе
Start()
. Снимите флажок с компонентаNav Mesh Agent
на объекте и добавьте код в скриптvoid Start() { GetComponent<NavMeshAgent>().enabled = true; }
- Если монстр и главный герой динамически генерируются в методе
Awake()
, при создании объекта в скрипте динамически добавляйтеNav Mesh Agent
компоненты к объекту.private NavMeshAgent _agent; void Awake () { _agent= this.gameObject.AddComponent<NavMeshAgent> (); } void Start () { _agent.enabled = true; }