using UnityEngine; using System.Collections; public class FireballProjectile : MonoBehaviour { private Vector3 targetPosition; private float speed; private GameObject explosionPrefab; private Collider ownerCollider; private bool canExplode = false; void Start() { Destroy(gameObject, 5f); } void Update() { transform.position = Vector3.MoveTowards(transform.position, targetPosition, speed * Time.deltaTime); } public void Setup(Vector3 target, float speed, GameObject explosionPrefab) { this.targetPosition = target; this.speed = speed; this.explosionPrefab = explosionPrefab; GameObject player = GameObject.FindWithTag("Player"); if (player != null) { ownerCollider = player.GetComponent(); if (ownerCollider != null && GetComponent() != null) Physics.IgnoreCollision(ownerCollider, GetComponent()); } StartCoroutine(EnableExplosionAfterDelay(0.1f)); } private IEnumerator EnableExplosionAfterDelay(float delay) { yield return new WaitForSeconds(delay); canExplode = true; } private void OnTriggerEnter(Collider other) { if (!canExplode) return; if (other.CompareTag("Monster")) { MonsterController monster = other.GetComponent(); if (monster != null) { monster.TakeDamage(30); } Explode(); } else if (!other.isTrigger) { Explode(); } } void Explode() { if (explosionPrefab != null) Instantiate(explosionPrefab, transform.position, Quaternion.identity); Destroy(gameObject); } }