| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- 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;
- // Empêcher collision immédiate avec le joueur
- GameObject player = GameObject.FindWithTag("Player");
- if (player != null)
- {
- ownerCollider = player.GetComponent<Collider>();
- if (ownerCollider != null && GetComponent<Collider>() != null)
- Physics.IgnoreCollision(ownerCollider, GetComponent<Collider>());
- }
- // Attendre un peu avant de pouvoir exploser
- StartCoroutine(EnableExplosionAfterDelay(0.1f));
- }
- private IEnumerator EnableExplosionAfterDelay(float delay)
- {
- yield return new WaitForSeconds(delay);
- canExplode = true;
- }
- private void OnTriggerEnter(Collider other)
- {
- if (!canExplode) return; // Ignore si pas prêt !
- Debug.Log("[FireballSetup] " + other.name);
- if (other.CompareTag("Monster"))
- {
- Debug.Log("[Fireball] Monstre touché !");
- MonsterController monster = other.GetComponent<MonsterController>();
- if (monster != null)
- {
- Debug.Log("Damage to monster");
- monster.TakeDamage(30); // dégâts
- }
- Explode();
- }
- else if (!other.isTrigger) // Ignore triggers comme les zones
- {
- Debug.Log("[Fireball] " + other.name);
- Explode();
- }
- }
- void Explode()
- {
- if (explosionPrefab != null)
- Instantiate(explosionPrefab, transform.position, Quaternion.identity);
- Destroy(gameObject);
- }
- }
|