FireballProjectile.cs 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. using UnityEngine;
  2. using System.Collections;
  3. public class FireballProjectile : MonoBehaviour
  4. {
  5. private Vector3 targetPosition;
  6. private float speed;
  7. private GameObject explosionPrefab;
  8. private Collider ownerCollider;
  9. private bool canExplode = false;
  10. void Start()
  11. {
  12. Destroy(gameObject, 5f);
  13. }
  14. void Update()
  15. {
  16. transform.position = Vector3.MoveTowards(transform.position, targetPosition, speed * Time.deltaTime);
  17. }
  18. public void Setup(Vector3 target, float speed, GameObject explosionPrefab)
  19. {
  20. this.targetPosition = target;
  21. this.speed = speed;
  22. this.explosionPrefab = explosionPrefab;
  23. GameObject player = GameObject.FindWithTag("Player");
  24. if (player != null)
  25. {
  26. ownerCollider = player.GetComponent<Collider>();
  27. if (ownerCollider != null && GetComponent<Collider>() != null)
  28. Physics.IgnoreCollision(ownerCollider, GetComponent<Collider>());
  29. }
  30. StartCoroutine(EnableExplosionAfterDelay(0.1f));
  31. }
  32. private IEnumerator EnableExplosionAfterDelay(float delay)
  33. {
  34. yield return new WaitForSeconds(delay);
  35. canExplode = true;
  36. }
  37. private void OnTriggerEnter(Collider other)
  38. {
  39. if (!canExplode) return;
  40. if (other.CompareTag("Monster"))
  41. {
  42. MonsterController monster = other.GetComponent<MonsterController>();
  43. if (monster != null)
  44. {
  45. monster.TakeDamage(30);
  46. }
  47. Explode();
  48. }
  49. else if (!other.isTrigger)
  50. {
  51. Explode();
  52. }
  53. }
  54. void Explode()
  55. {
  56. if (explosionPrefab != null)
  57. Instantiate(explosionPrefab, transform.position, Quaternion.identity);
  58. Destroy(gameObject);
  59. }
  60. }