Страница 1 из 1

NavMeshAgent и анимации с RootMotion

СообщениеДобавлено: 09 апр 2016, 07:01
NapalmRain
Доброго всем времени суток!

Вопрос такого плана: есть у меня набор анимаций, подготовленных для персонажа, анимации с передвижением за счёт рутовой кости.
Решил я из болванки персонажа, уже настроенной, сделать болванку НПС.

Повесил на него NavMeshAgent, в скрипте управления задал ему направление, скорость установил на 0 а в анимацию передаю, что нужно идти.
И он идёт куда глаза глядят не поворачивает в нужном направлении. Поворачивать начинает только при установке скорости минимум на 0.05, но это уже визуально заметно, ведь модель передвигается анимацией и дополнительно скользит.

Возможно ли каким-то образом заставить работать вместе такой тип анимации и NavMeshAgent? Как-то брать от агента только информацию о том, куда идти, а идти уж самостоятельно?

Заранее благодарю за ответ!

Re: NavMeshAgent и анимации с RootMotion

СообщениеДобавлено: 09 апр 2016, 10:29
IDoNotExist
NapalmRain писал(а):Как-то брать от агента только информацию о том, куда идти, а идти уж самостоятельно?

NavMeshAgent.desiredVelocity

Re: NavMeshAgent и анимации с RootMotion

СообщениеДобавлено: 10 апр 2016, 10:48
NapalmRain
IDoNotExist писал(а):NavMeshAgent.desiredVelocity

Благодарю! В целом получилось, правда скорость на агенте всё равно должна быть не нулевой, но можно поставить столь незначительную, что будет неважно.

Обратил внимание, что если открыть вкладку Navigation в момент запуска игр, в окне сцены рисуется дебаг линии маршрутов. То есть чисто теоретически весь маршрут известен заранее, Нет ли каких-то методов получить массив точек, к примеру этого маршрута? Мне просто для себя интересно.

Re: NavMeshAgent и анимации с RootMotion

СообщениеДобавлено: 10 апр 2016, 12:40
alt3d
NavMeshPath.corners

Почитайте уже справку по NavMesh-у :)
http://docs.unity3d.com/ScriptReference/NavMesh.html

Re: NavMeshAgent и анимации с RootMotion

СообщениеДобавлено: 10 апр 2016, 13:54
NapalmRain
alt3d писал(а):NavMeshPath.corners

Почитайте уже справку по NavMesh-у :)
http://docs.unity3d.com/ScriptReference/NavMesh.html

Я понимаю, что это было бы грамотней всего, но пложо, когда с английским дружишь только на уровне языка программирования...

В любом случае спасибо!

Re: NavMeshAgent и анимации с RootMotion

СообщениеДобавлено: 10 апр 2016, 15:13
DeHHu
NapalmRain писал(а):
alt3d писал(а):NavMeshPath.corners

Почитайте уже справку по NavMesh-у :)
http://docs.unity3d.com/ScriptReference/NavMesh.html

Я понимаю, что это было бы грамотней всего, но пложо, когда с английским дружишь только на уровне языка программирования...

В любом случае спасибо!


Если посчитать путь вручную, то у пути будет поле corners.
http://docs.unity3d.com/ScriptReference ... hPath.html

Re: NavMeshAgent и анимации с RootMotion

СообщениеДобавлено: 12 фев 2019, 22:03
MaxBorn
IDoNotExist писал(а):
NapalmRain писал(а):Как-то брать от агента только информацию о том, куда идти, а идти уж самостоятельно?

NavMeshAgent.desiredVelocity

Тема 16-го года, но я уже чтоб новую не открывать по одному и тому же вопросу сюда попробую написать)
Дальше нужно вращать бота к позиции desiredVelocity?
Я делаю так: transform.LookAt(new Vector3(agent.desiredVelocity.x, transform.position.y, agent.desiredVelocity.z));
Не выходит. Прописал Debug.Log(agent.desiredVelocity); что бы посмотреть на координаты в консоле во время игры, они не логичные какие-то.
Как достичь нужного результата?

Re: NavMeshAgent и анимации с RootMotion

СообщениеДобавлено: 13 фев 2019, 00:12
Cr0c
Синтаксис:
Используется csharp
private void OnAnimatorMove() {
 actor.position = animator.rootPosition;
 actor.rotation = animator.rootRotation;
}

для перемещения и поворота костью
Я и агента использовал только для расчета пути, а потом уже двигал анимацией по точкам пути, а перед этим ещё и точки отодвигал наружу от углов
Синтаксис:
Используется csharp
path.AddRange(agentPath.corners);
path2.AddRange(path);
if (path.Count > 2)
 for (int i = 1; i < path.Count - 1; i++) {
  var help = path[i] - path[i - 1];
  var help2 = path[i + 1] - path[i - 1];
  var diff = Vector3.Cross(help2, Vector3.up).normalized * agent.radius * 0.5f;
  path2[i] += diff * Mathf.Sign(Vector3.Dot(diff, help));
 }
else
 if (path2.Count == 0)
  path2.Add(agent.destination);
 

Re: NavMeshAgent и анимации с RootMotion

СообщениеДобавлено: 13 фев 2019, 15:56
MaxBorn
Cr0c писал(а):для перемещения и поворота костью
Я и агента использовал только для расчета пути, а потом уже двигал анимацией по точкам пути, а перед этим ещё и точки отодвигал наружу от углов

Спасибо за ответ) Но, честно говоря, я ничего не смог вынести из вашего кода(
Мне просто нужно что бы бот поворачивался лицом к ближайшей точке его маршрута. Так же как и с помощью nav mash agent-а. Как можно узнать мировые координаты ближайшей точки маршрута?

Re: NavMeshAgent и анимации с RootMotion

СообщениеДобавлено: 13 фев 2019, 16:02
Cr0c
MaxBorn писал(а):Как можно узнать мировые координаты ближайшей точки маршрута?

Первая строка примера agentPath.corners

Re: NavMeshAgent и анимации с RootMotion

СообщениеДобавлено: 13 фев 2019, 16:37
MaxBorn
Cr0c писал(а):
MaxBorn писал(а):Как можно узнать мировые координаты ближайшей точки маршрута?

Первая строка примера agentPath.corners

Теперь все шикарно)) Благодарю)