Ну если бы они за 10 метров перенаправлялись в направление которое "гарантирует" обход, то лучше это делать пораньше, т.к. угол поворота будет тогда меньше и будет меньше бросаться в глаза.
|
так и есть, когда челы пореже расставлены, ты не заметишь как они тебя обходят медленно.
если интересно, алгоритм такой:
var sideVec = Vector3.Cross(goalDir.normalized, Vector3.up);
...
на все препятствия:
vec = препятствие - person.tform.position;
side = Mathf.Sign(-Vector3.Dot(vec.normalized, sideVec));
weight = 1.0f / vec.sqrMagnitude;
avoidFactor += weight * side;
...
avoidDir = sideVec * (avoidFactor / кол-во препятствий) * energy;
далее avoidDir отклоняет собой желаемый вектор движения.
"препятствиями" являются все челы, которых данный видит И (!) точки по краям текущего полигона навмеша с боков чела (чтобы сильно не съезжал с полигона).
пробовал по-разному делать, в конце концов на таком остановился.