mburakkarakas
Hectopat
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:
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.
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.