Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / NavMesh не работает как надо

NavMesh не работает как надо

Поделиться
dmitrykozyrПостоялецwww21 сен. 20179:06#0
Делаю битву с боссом в юнити. Босс с помощью NavMesh должен перемещаться в сторону игрока.
Когда он подходит близко к игроку, то начинается полная жесть - он с бешеной скоростью летает вокруг игрока:

1 | NavMesh не работает как надо

У босса есть
- коллайдер, чтобы фиксировать, когда игрок в него стреляет
- NavMeshAgent для перемещения в сторону игрока
- триггер внизу, при соприкосновении с которым игрок будет считаться убитым

Как сделать, чтобы босс не наклонялся, находясь близко к игроку?

2 | NavMesh не работает как надо

Правка: 21 сен. 2017 9:07

greencrazycatПостоялецwww21 сен. 201711:59#1
по описанию сложно понять суть проблемы
но как вариант :
1. использовать на игроке компонент Nav Mesh Obstacle
2. не использовать NavMesh Agent для непосредственного движения а только для расчетов пути
TokarnПостоялецwww21 сен. 201713:43#2
Вполне возможно ты не тормозишь агент вовремя и он тащит весь объект на коллайдер игрока, а так как на объекте тоже есть коллайдер и он не помечен как триггер, выходит что физический движок пытается "вытолкнуть коллайдер босса из коллайдера игрока". Но странно что кинематический ригидбоди так себя не ведет он не является динамическим физическим объектом как таковым. В любом случае мне кажется проблема именно из за того что агент тащит боса на игрока без какого либо оффсета расстояния между ними.

Еще не видна структура самого объекта босса. Может быть у тебя риг анимация, а босс натянут не верно на кости из-за этого такие казусы вполне возможны

Правка: 21 сен. 2017 13:47

dmitrykozyrПостоялецwww21 сен. 201714:11#3
Кажется понял, в чем дело. Я Stopping Distance в скрипте и компоненте NavMeshAgent устанавливал в 5, а нужно было сделать 0. Потому что когда было 5, босс не мог подойти к игроку, но скрипт его все-равно к нему толкал. Вот скрипт, если что
    public Transform target;
    private NavMeshAgent agent;

    public int attackDistance;
    public bool shouldStop;

    void Start ()
    {
        agent = GetComponent<NavMeshAgent>();
  }
  
  void Update ()
    {
        if (!shouldStop)
        {
            agent.SetDestination(target.position);

            //agent.destination = new Vector3(1, 2, 3);
            //agent.Resume();

            agent.destination = target.position;
            if (agent.remainingDistance >= attackDistance) // если агент еще не подошел к цели достаточно близко
                agent.Resume();
            else
                transform.LookAt(target); // поворачиваем объект к цели
        }
    }

В общем, теперь заработало, всем спасибо)

TokarnПостоялецwww21 сен. 201714:37#4
Новость для меня =) буду знать что нав меш сходит с ума если таскать объект скриптом поперек его мнения. Хотя такие казусы бывали с аниматором, когда управление движением отдавали ему, одновременно с агентом
endeavour_prПостоялецwww23 сен. 20175:44#5
добавь тег в название

/ Форум / Программирование игр / Физика

2001—2017 © GameDev.ru — Разработка игр