Diese Frage befasst sich speziell mit der Recast Navigation-Bibliothek.
Ich habe einen Agenten mit hinzugefügt addAgent
und sein Ziel mit festgelegt requestMoveTarget
. Wenn der Agent sein Ziel erreicht, stoppt er, aber wenn er (von einem anderen Agenten) aus dem Weg geschoben wird, versucht er, zu seinem Ziel zurückzukehren. Möchten Sie stattdessen, dass es anhält und untätig wird, damit andere Agenten, die vorbeigehen, es beiseite schieben und es nicht zurückkehrt.
Ich habe versucht, resetMoveTarget
in agent.npos
der Nähe zu sein agent.targetPos
(als ob der Agent sein Ziel erreicht hätte), aber das scheint die innere Logik der Crowd-Simulation zu brechen - der Agent würde einfach weiter in die alte Richtung gehen und niemals anhalten.
Wie kann ich einen Agenten in RecastNavigation ordnungsgemäß anweisen, anzuhalten und inaktiv (und dennoch drückbar) zu werden?
quelle
resetMoveTarget
lokal hinzuzufügen, aber ich beobachte keinen Unterschied.ag->corridor.reset(ag->corridor.getFirstPoly(), agent->npos);
Ich bin nicht sicher, aber meine Vermutung wäre, "requestMoveVelocity" auch mit dem Nullvektor auf diesem Agenten aufzurufen. Versuche es.
quelle
Hinweis: Diese Lösung scheint überflüssig zu sein, aber ich lasse sie, falls das Problem erneut auftritt.
Nach viel Dekodierung, Versuch und Irrtum nahm ich
dtCrowd.resetMoveTarget
als Basis und fand einen Weg, es zu ändern:PS Der obige Code ist in Delphi, sollte aber in C ++ genauso gut funktionieren.
Der Autor der Neufassung der Navigation kommentierte:
quelle