Всем привет! Суть алгоритма заключается в том, чтобы враг подходил к игроку, чтобы враг убегал от игрока и чтобы враг стал на фиксированном расстоянии. На гифке ниже можно наблюдать тряску врага .
Вставил ту часть кода в которой подразумеваю ошибки. Очень прошу вас помочь.
Код
private void FixedUpdate()
{
if (Vector2.Distance(transform.position, player.position) > maxDistance)
{
rb.constraints = RigidbodyConstraints2D.None;
rb.isKinematic = false;
moveCharacter(movement, moveSpeed);
}
else if (Vector2.Distance(transform.position, player.position) < maxDistance)
{
rb.constraints = RigidbodyConstraints2D.None;
moveCharacter(movement, -moveSpeed);
}
else if (Vector2.Distance(transform.position, player.position) == maxDistance)
{
rb.constraints = RigidbodyConstraints2D.FreezeAll;
rb.isKinematic = false;
}
}
void moveCharacter(Vector2 direction, float speed)
{
rb.MovePosition((Vector2)transform.position + (direction * speed * Time.deltaTime));
}
Добавлено (12 Августа 2020, 00:57)
---------------------------------------------
Решение нашлось методом тыка. Для того, чтобы врага не штырило, необходимо увеличить значение линейного сопротивления и углового. На английском Linear drag and Angular drag.
Всем кто столкнулся с подобной проблемой желаю удачи!Добавлено (12 Августа 2020, 12:11)
---------------------------------------------
Так же таким способом можно убирать дрожь игрока, если тот трясется при столкновении с коллайдерами.