else if (Vector2.Distance(transform.position, player.position) < stoppingdistance && (Vector2.Distance(transform.position, player.position) > retreatDistance))
{
transform.position = this.transform.position;
}
это не нужно transform.position = this.transform.position; не имеет смысл
else if (Vector2.Distance(transform.position, player.position) < retreatDistance)
{
transform.position = Vector2.MoveTowards(transform.position, player.position, -speed * Time.deltaTime);
}
проблема скорее всего тут, вероятно лучше не скорость умножать на минус 1 а таргет позишен
float dist=Vector2.Distance(transform.position,player.position);
if(dist>stoppingdistance)transform.position = Vector2.MoveTowards(transform.position, player.position, speed * Time.deltaTime);
else if(dist<retreatDistance) transform.position = Vector2.MoveTowards(transform.position, player.position*-Vector2.one, speed * Time.deltaTime); //тут надо смотреть на игра сбоку или вид с верху
а ну и конечно stoppingdistance>retreatDistance
а и да если этот скрип есть на персонаже то персонаж будет сам от себя убегать