| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- 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<Collider>();
- if (ownerCollider != null && GetComponent<Collider>() != null)
- Physics.IgnoreCollision(ownerCollider, GetComponent<Collider>());
- }
- 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<MonsterController>();
- 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);
- }
- }
|