using System.Collections; using System.Collections.Generic; using UnityEngine; public class Enemy : MonoBehaviour { [SerializeField] private GameObject _enemyLaserPrefab; private Player _player; private Animator _animator; private AudioSource[] _audioClip; private float _speed = 3.0f; private float _fireRate = 3.0f; private float _canFire = 1; private bool _isDestroyed; void Start() { _player = GameObject.Find("Player").GetComponent(); if (_player == null) { Debug.LogError("Enemy::Player component is NULL."); } _animator = GetComponent(); if (_animator == null) { Debug.LogError("Enemy::Animator component is NULL."); } _audioClip = GetComponents(); if (_audioClip == null) { Debug.LogError("Enemy::AudioClip component is NULL."); } } void Update() { transform.Translate(Vector3.down * _speed * Time.deltaTime); if (transform.position.y < -5.2f) { float randomX = Random.Range(-9f, 9f); transform.position = new Vector3(randomX, 7.5f, 0); } FireLaser(); } private void FireLaser() { if (Time.time > _canFire && _isDestroyed == false) { _fireRate = Random.Range(3f, 7f); _canFire = Time.time + _fireRate; GameObject enemyLaser = Instantiate(_enemyLaserPrefab, transform.position + new Vector3(0, 0, 0), Quaternion.identity); _audioClip[1].Play(); Laser[] lasers = enemyLaser.GetComponentsInChildren(); for (int i = 0; i < lasers.Length; i++) { lasers[i].AssignEnemyLaser(); } } } private void OnTriggerEnter2D(Collider2D other) { string colliderTag = other.tag; if (colliderTag == "Player") { Player player = other.transform.GetComponent(); if (player != null) { player.Damage(); } OnHit(this.gameObject); } if (colliderTag == "Laser") { if (_player != null) { _player.AddScore(10); } Destroy(other.gameObject); OnHit(this.gameObject); } } private void OnHit(GameObject obj) { _animator.SetTrigger("OnEnemyDeath"); _speed = 0; _audioClip[0].Play(); _isDestroyed = true; obj.GetComponent().enabled = false; Destroy(obj, 2.7f); } }