topdown shooter unity

hello! ive tried to make a topdown shooter but when i made my enemies follow the player they just randomly speed up if i hit the player or rotate him. Do you have any ideas why does this happen ? Also when they collide my enemies push the player far away at both the enemies and the player become uncontrollable just randomly mooving what can i do about it ?

It’s hard to answer without you providing some example of your scripts. My guess is you’re using rigidbodies and they might be getting a lot of rotation on collision, which makes them uncontrollable. You could try utilizing the freeze rotation variable in rigidbody component or, if you actually want them to rotate a bit after colliding (because they are, for example, cars) modifying rigidbodies’ angular drag

@www4
public class Enemy : MonoBehaviour
{
public float speed = 5f;
private Transform player;
public int health;
private Rigidbody2D rb;
private Vector2 movement;
private Animator anim;
private float dazedTime;
public float startDazedTime;

private void Start()
{
    anim = GetComponent<Animator>();
    rb = this.GetComponent<Rigidbody2D>();
    player = GameObject.FindGameObjectWithTag("Player").transform;
}

private void Update()
{
   
    Vector3 direction = player.position - transform.position;
    float angle = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg;
    rb.rotation = angle;
    direction.Normalize();
    movement = direction;
    if(dazedTime <=0)
    {
        speed = speed;
    }
    else
    {
        speed = speed-2;
        dazedTime -= Time.deltaTime;
    }

    if (health <= 0)
    {
        Destroy(gameObject);
    }

}


void Enemyruns()
{
    anim.SetBool("isRunning", true);
}

private void FixedUpdate()
{
    moveCharacter(movement);
}


void moveCharacter(Vector2 direction)
{
    rb.MovePosition((Vector2)transform.position + (direction * speed * Time.deltaTime));
}
public void TakeDamage(int damage)
{
    dazedTime = startDazedTime;
    health -= damage;
}

}

can you show the code?