private void Start() { Vector3 position = transform.position; _closestCenter = GenericFunctions.GetClosestCircle(position); _closestEnemy = GenericFunctions.FindClosestEnemy(position); _rb = GetComponent <Rigidbody2D>(); }
// Update is called once per frame private void FixedUpdate() { Vector3 position = transform.position; // Find closest enemy, if no enemy is currently stored in _closestEnemy if (_closestEnemy == null) { // ReSharper disable once Unity.PerformanceCriticalCodeInvocation _closestEnemy = GenericFunctions.FindClosestEnemy(transform.position); // If _closestEnemy is still null, it means nothing new was found if (_closestEnemy == null) { Destroy(gameObject); return; } } _cooldownTimer -= Time.deltaTime; if (_cooldownTimer <= 0) { // Rotate missile towards closest enemy Vector3 target = _closestEnemy.transform.position; float angle = Mathf.Atan2(target.y - position.y, target.x - position.x) * 180 / Mathf.PI; Vector3 rotation = new Vector3(0, 0, angle); transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.Euler(rotation), Time.deltaTime * 10f); } // Move forward Vector3 impulse = new Vector3(movementForce, 0, 0); _rb.AddRelativeForce(impulse, ForceMode2D.Impulse); // Self destruct after n seconds _selfDestructTimer -= Time.deltaTime; // Also self-destruct if hits the edge of the bubble if (_selfDestructTimer <= 0 || Vector3.Distance(_closestCenter, position) > 12f) { Destroy(gameObject); } }