Мили атака бота

Форум для всего, что связано с ИИ.

Мили атака бота

Сообщение MrDmitry 26 июн 2020, 07:16

Здраввствуйте. Делаю очень простого бота и появилась проблема.
На боте весит navmash agent. То есть бот идет к цели(игроку) при достижении дистанции для атаки, начинает проигрываться анимации атаки. На оружие повешен триггер которые при соприкосновении с игроком убивает его. После проигрывания анимации срабатывает функция. Выглядит в коде все примерно так


Синтаксис:
Используется csharp
private static NavMeshAgent Agent;

//Дистанция атаки
public float AtackDistance = 2f;

private Animator anim;
//Цель приследования
protected static GameObject Target;
//Пустой объект
protected static GameObject point;

void Update()
    {
            if (GetAgentDistance() <= AtackDistance)
            {
                OnAttack();
            }
    }

protected float GetDistance()
    {
         return Agent.remainingDistance;
    }

    private void OnAttack()
    {
            StopMove();
            anim.SetBool("Run", false);
            anim.SetTrigger("Attack");
    }

    protected void StopMove()
    {
        //Ставим точку в области персонажа
        point.transform.position = gameObject.transform.position;
        Target = point;
    }


Проблема в том что монстр, во время атаки все равно продолжает преследовать игрока и при проигрывании анимации, "скользит" за игроком. Для этого добавил функцию StopMove() которая должна была ставить пустой объект на месте последнего положения монстра перед атакой. Но так он просто остонавливаеться и начинает дергаться. Добавил в конец анимации ивент с функцией OnExitAttackState

Синтаксис:
Используется csharp
   
public GameObject Player;

public void OnExitAttackState()
    {  
        Target = Player.transform.position;
    }


Но теперь минотавр просто дергаеться....

PS на самом деле бот сложнее чем представленный код, у бота есть зрение и слух по которым он ориентируеться где сейчас находится игрок. А так же есть несколько состояний поведения бота. Но код отображает общею проблему.
MrDmitry
UNITрон
 
Сообщения: 223
Зарегистрирован: 05 авг 2017, 17:21

Re: Мили атака бота

Сообщение VladikDEV 26 июн 2020, 18:10

Надо анимацию атаки вынести в отдельный слой, чтобы она всегда проигрывалась при условии что дистанция между юнитами меньше заданной. А уже в другом слое будет проигрываться анимация ходьбы или айдл в заисимости от того двигается ли цель и с какой скоростью.
VladikDEV
UNIт
 
Сообщения: 88
Зарегистрирован: 24 май 2016, 13:45
Откуда: Минск

Re: Мили атака бота

Сообщение vitalik77 26 май 2021, 10:43

VladikDEV писал(а):Надо анимацию атаки вынести в отдельный слой, чтобы она всегда проигрывалась при условии что дистанция между юнитами меньше заданной. А уже в другом слое будет проигрываться анимация ходьбы или айдл в заисимости от того двигается ли цель и с какой скоростью.

Поддерживаю, логику запуска анимаций пересмотри. При достижении минимальной дистанции отключить преследование игрока и анимацию хотьбы, а включить атаку, вот и все.
vitalik77
UNIверсал
 
Сообщения: 434
Зарегистрирован: 06 май 2021, 09:56

Re: Мили атака бота

Сообщение TeslaGan 26 май 2021, 12:48

MrDmitry писал(а):
Синтаксис:
Используется csharp
void Update()
    {
            if (GetAgentDistance() <= AtackDistance)
            {
                OnAttack();
            }
    }
    private void OnAttack()
    {
            StopMove();
            anim.SetBool("Run", false);
            anim.SetTrigger("Attack");
    }}


Проблема в том что монстр, во время атаки все равно продолжает преследовать игрока и при проигрывании анимации, "скользит" за игроком.

ну правильно он преследует. а где работа с навмешем? вы ему ничего не говорите, он и старается выполнять свою работу...

p.s. какая анимация о чем вы? просто обычная проблема с компоновкой компонентов...
TeslaGan
UNITрон
 
Сообщения: 315
Зарегистрирован: 01 авг 2015, 18:00


Вернуться в Искуственный Интеллект

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1