Esta pregunta es específicamente acerca de cómo tratar con la biblioteca Recast Navigation.
He agregado un agente con addAgent
y establecí su objetivo con requestMoveTarget
. Cuando el agente llega a su destino, se detiene, pero cuando otro agente lo empuja (intentará volver a su objetivo). En cambio, desea que se detenga y quede inactivo, de modo que cuando otro agente camine empujándolo a un lado y no regrese.
He intentado llamar resetMoveTarget
al agent.npos
estar cerca agent.targetPos
(como si el agente hubiera llegado a su destino), pero eso parece romper la lógica interna de la simulación de la multitud: el agente simplemente seguiría caminando en la dirección anterior, sin detenerse nunca.
¿Cómo le digo correctamente a un agente que se detenga y quede inactivo (pero empujable) en RecastNavigation?
fuente
resetMoveTarget
nivel local pero no observo una diferencia.ag->corridor.reset(ag->corridor.getFirstPoly(), agent->npos);
No estoy seguro, pero supongo que también debería llamar "requestMoveVelocity" con cero-vector en ese agente. Darle una oportunidad.
fuente
Nota: Esta solución parece ser superflua, pero la dejo en caso de que el problema vuelva a aparecer.
Después de mucha decodificación, prueba y error, tomé
dtCrowd.resetMoveTarget
como base y encontré una forma de modificarlo:PS El código anterior está en Delphi, pero debería funcionar igual de bien en C ++.
El autor de navegación refundida comentó:
fuente