Oyunda "NullReferenceException" Hatası

mburakkarakas

Hectopat
Katılım
19 Eylül 2021
Mesajlar
793
Çözümler
7
Yer
Tekirdağ
Geliştirdiğim oyunda boss fight yapılacak son kısma geldim ama nerede hata var hala çözemedim. Düşman bana bir madde fırlatıyor yukarıdan fakat bana gelmeden bu hatayı alıyorum veya geldiğinde canımı götürdüğünde alıyorum.
Kodum bu:

C#:
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
 }
 }
 }
}

Hata bu:
NullReferenceException: Object reference not set to an instance of an object
ToxicProjectile3D. Update () (at Assets/ToxicProjectile.cs:67)

Yardımcı olursanız çok sevinirim. Neredeyse sabah 7'den beri uğraşıyorum. İhtiyacınız olan bir şey daha varsa atabilirim.
 

Technopat Haberler

Geri
Yukarı