using UnityEngine;
public class ToxicProjectile3D : MonoBehaviour
{
public float speed = 5f; // Mermi hızı
private Transform player; // Player Transform
private Vector3 direction; // Hareket yönü
private Rigidbody rb; // Rigidbody bileşeni
public int damage = 35; // Merminin vereceği hasar
public Sprite[] toxicSprites; // 3 farklı sprite dizisi
private SpriteRenderer spriteRenderer; // SpriteRenderer bileşeni
private int currentSpriteIndex = 0; // Geçerli sprite indexi
public float timeBetweenSprites = 0.2f; // Sprite'lar arasındaki zaman (saniye cinsinden)
private float spriteTimer = 0f; // Sprite değişimi için sayaç
void Start()
{
// Player'ı buluyoruz
player = GameObject.FindGameObjectWithTag("Player")?.transform;
// Rigidbody'yi alıyoruz
rb = GetComponent<Rigidbody>();
// SpriteRenderer bileşenini alıyoruz
spriteRenderer = GetComponent<SpriteRenderer>();
// Eğer SpriteRenderer yoksa, yeni bir tane ekliyoruz
if (spriteRenderer == null)
{
spriteRenderer = gameObject.AddComponent<SpriteRenderer>();
}
// Merminin hareket yönünü hesaplıyoruz
if (player != null)
{
direction = (player.position - transform.position).normalized; // Player'a doğru yönelme
}
else
{
Debug.LogError("Player not found! Make sure there is an object tagged as 'Player'.");
}
// Başlangıçta sprite'ı set ediyoruz
if (toxicSprites != null && toxicSprites.Length > 0)
{
spriteRenderer.sprite = toxicSprites[currentSpriteIndex];
}
else
{
Debug.LogWarning("ToxicSprites array is empty or not assigned! Please assign sprites.");
}
}
void Update()
{
// Eğer player null ise, hareket etmeyi durdurabiliriz
if (player == null) return;
// Mermiyi player'a doğru hareket ettiriyoruz
transform.position += direction * speed * Time.deltaTime;
// Sprite değişimini animasyon gibi yapmak için
if (toxicSprites.Length > 0)
{
// Sprite değişim süresi geçtiyse
spriteTimer += Time.deltaTime;
if (spriteTimer >= timeBetweenSprites)
{
// Sprite'ı değiştir
currentSpriteIndex = (currentSpriteIndex + 1) % toxicSprites.Length; // Döngüsel değişim
spriteRenderer.sprite = toxicSprites[currentSpriteIndex]; // Yeni sprite'ı ayarlıyoruz
// Sayaçı sıfırla
spriteTimer = 0f;
}
}
// Raycast ile Player'ı kontrol et
RaycastHit hit;
if (Physics.Raycast(transform.position, direction, out hit, speed * Time.deltaTime))
{
if (hit.collider.CompareTag("Player"))
{
// Player'a çarptığında hasar ver
PlayerHealth playerHealth = hit.collider.GetComponent<PlayerHealth>(); // Player'ın health script'ini al
if (playerHealth != null)
{
playerHealth.DamagePlayer(damage); // Player'a hasar ver
}
// Mermiyi yok et
Destroy(gameObject); // Bu mermiyi yok ediyoruz
// Klonları yok et
DestroyAllClones();
}
}
}
// Tüm klonları yok etmek için fonksiyon
private void DestroyAllClones()
{
// Eğer bu mermi bir klon ise, kendi başına yok olacaktır
ToxicProjectile3D[] allClones = FindObjectsOfType<ToxicProjectile3D>();
foreach (var clone in allClones)
{
if (clone != this) // Kendini atlaması için kontrol
{
Destroy(clone.gameObject); // Diğer mermileri yok et
}
}
}
}