Показать сообщение отдельно
Старый 22.02.2015, 00:02   #209
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: Faded [игра мечты]

Ну если бы они за 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 отклоняет собой желаемый вектор движения.

"препятствиями" являются все челы, которых данный видит И (!) точки по краям текущего полигона навмеша с боков чела (чтобы сильно не съезжал с полигона).

пробовал по-разному делать, в конце концов на таком остановился.
__________________
бложик | geom.io | твиттер | faded | демо 1 2 | роботы | лайтмаппер
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо Mr_F_ за это полезное сообщение:
moka (22.02.2015), Randomize (25.11.2016)