Esta pergunta é especificamente sobre como lidar com a biblioteca Recast Navigation.
Eu adicionei um agente addAgent
e defini seu destino com requestMoveTarget
. Quando o agente atinge seu destino, ele para, mas ao ser empurrado para fora do caminho (por outro agente), ele tenta retornar ao seu destino. Em vez disso, queira que ele pare e fique ocioso, para que, quando outro agente estiver andando, empurre-o para o lado e ele não retorne.
Tentei ligar resetMoveTarget
para agent.npos
estar perto de agent.targetPos
(como se o agente tivesse atingido seu destino), mas isso parece quebrar a lógica interna da simulação de multidão - o agente continuaria andando na direção antiga, sem parar.
Como instruo corretamente um agente para parar e ficar inativo (ainda que empurrável) no RecastNavigation?
fonte
resetMoveTarget
localmente, mas não observo diferença.ag->corridor.reset(ag->corridor.getFirstPoly(), agent->npos);
Não tenho certeza, mas meu palpite seria chamar "requestMoveVelocity" com vetor zero também nesse agente. De uma chance.
fonte
Nota: Esta solução parece supérflua, mas deixo-a caso o problema apareça novamente.
Após muita decodificação, tentativa e erro, tomei
dtCrowd.resetMoveTarget
como base e encontrei uma maneira de modificá-lo:O código PS Above está no Delphi, mas deve funcionar tão bem no C ++.
O autor da Recast Navigation comentou:
fonte