private void Update() { if (stunned) { if (Time.time - stunTimer > stunDuration) { stunned = false; } else { rb.velocity = new Vector3(0, 0, 0); return; } } Vector2 towardPlayer = player.transform.position - transform.position; Vector2 steering = towardPlayer.normalized; Vector2 force = steering * followStrength * Time.deltaTime; float dist = towardPlayer.magnitude; if (shootingComponent != null) { if (dist < shootingComponent.distanceFromPlayer) { force *= -1; // puts distance } else if (dist < shootingComponent.distanceForShooting) { force = Vector2.zero; // maintains distance shootingComponent.SendMessage(nameof(EnemyShootingComponent.setActiveShooter), true); } else { shootingComponent.SendMessage(nameof(EnemyShootingComponent.setActiveShooter), false); } } if (dist > minDist) { force *= dist / minDist * offScreenBoost; } rb.AddForce(force); if (faceMove) { this.gameObject.transform.rotation = Quaternion.Euler(0, 0, faceOffset + (Mathf.Sign(towardPlayer.y)) * Vector3.Angle(new Vector3(1, 0, 0), new Vector3(towardPlayer.x, towardPlayer.y, 0))); } followStrength = followStrength * maxSpeed; }