Мили атака бота
Добавлено: 26 июн 2020, 07:16
Здраввствуйте. Делаю очень простого бота и появилась проблема.
На боте весит navmash agent. То есть бот идет к цели(игроку) при достижении дистанции для атаки, начинает проигрываться анимации атаки. На оружие повешен триггер которые при соприкосновении с игроком убивает его. После проигрывания анимации срабатывает функция. Выглядит в коде все примерно так
Проблема в том что монстр, во время атаки все равно продолжает преследовать игрока и при проигрывании анимации, "скользит" за игроком. Для этого добавил функцию StopMove() которая должна была ставить пустой объект на месте последнего положения монстра перед атакой. Но так он просто остонавливаеться и начинает дергаться. Добавил в конец анимации ивент с функцией OnExitAttackState
public GameObject Player;
public void OnExitAttackState()
{
Target = Player.transform.position;
}
Но теперь минотавр просто дергаеться....
PS на самом деле бот сложнее чем представленный код, у бота есть зрение и слух по которым он ориентируеться где сейчас находится игрок. А так же есть несколько состояний поведения бота. Но код отображает общею проблему.
На боте весит 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;
}
//Дистанция атаки
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 на самом деле бот сложнее чем представленный код, у бота есть зрение и слух по которым он ориентируеться где сейчас находится игрок. А так же есть несколько состояний поведения бота. Но код отображает общею проблему.