Cette question concerne spécifiquement la gestion de la bibliothèque de navigation de refonte.
J'ai ajouté un agent avec addAgent
et défini son objectif avec requestMoveTarget
. Lorsque l'agent atteint sa destination, il s'arrête, mais lorsqu'il est repoussé (par un autre agent), il essaiera de revenir à sa cible. Au lieu de cela, voulez-vous qu'il s'arrête et devienne inactif, de sorte que lorsqu'un autre agent marche en le repoussant et qu'il ne revienne pas.
J'ai essayé d'appeler resetMoveTarget
en agent.npos
étant proche de agent.targetPos
(comme si l'agent avait atteint sa destination), mais cela semble briser la logique interne de la simulation de foule - l'agent continuerait simplement à marcher dans l'ancienne direction, sans jamais s'arrêter.
Comment dire correctement à un agent de s'arrêter et de devenir inactif (mais pouvant être poussé) dans RecastNavigation?
la source
resetMoveTarget
localement mais je n'observe aucune différence.ag->corridor.reset(ag->corridor.getFirstPoly(), agent->npos);
Je ne suis pas sûr mais ma conjecture serait d'appeler "requestMoveVelocity" avec zéro-vecteur également sur cet agent. Essaie.
la source
Remarque: Cette solution semble être superflue, mais je la laisse au cas où le problème réapparaîtrait.
Après beaucoup de décodage, d'essais et d'erreurs, j'ai pris
dtCrowd.resetMoveTarget
comme base et trouvé un moyen de le modifier:PS Le code ci-dessus est en Delphi, mais il devrait tout aussi bien fonctionner en C ++.
L'auteur de la refonte de la navigation a commenté:
la source