Hey merhaba ziyaretçi bize destek olmak ister misin ? Hemen Kayıt Ol Seni hiç sıkmadan kayıt edeceğiz endişelenmek bize destek olduğun için teşekkürler.



  • Toplam: 0 Oy - Ortalama: 0
  • 1
  • 2
  • 3
  • 4
  • 5
GameObject için NullReferenceException Uyarısı
#1
Merhabalar,

NullReferenceObjects uyarıları ile ilgili internette birçok açıklama ve bilgi var ancak ben nedense bu durumu çözemedim.

GameObject'lerimi public olarak tanımladım, ve Scene'deki ilgili nesneleri Inspector paneline sürükle bırak ile birlikte bıraktım.

Aşağıda scalescript içinde bulunan değişkenler ve start fonksiyonu mevcuttur.


Kod:
public class scalescript : MonoBehaviour
{

   public int Kontrol;
   public float AnlikBoyutx, AnlikBoyuty, IstenenBoyutx, IstenenBoyuty;
   public Vector3 vector;
   public Vector3 Istenenvector;
   public GameObject nesne;
   public int ZoomSpeed;


   public GameObject Buton_Play;
   public GameObject ButtonDown;
   public GameObject ButtonUp;
   public GameObject Canvas_Buton;



   // Start is called before the first frame update
   void Start()
   {
       ZoomSpeed = 20;
       Kontrol = 3;

       Canvas_Buton = GameObject.Find("CanvasButon");

       ButtonDown = GameObject.Find("Button_Down");
       ButtonUp = GameObject.Find("Button_Up");
       Buton_Play = GameObject.Find("PlayButonu");
       nesne = GameObject.Find("Quad_Video5");
       vector = nesne.GetComponent<Transform>().localScale;
}



Burası da  NullReferenceException uyarısını veren fonksiyonlarım:

Kod:
public void TargetLost()
   {
       ButtonUp.gameObject.SetActive(false);  //Sorunsuz çalışıyor
       ButtonDown.gameObject.SetActive(false); //NullReferenceException uyarısı veriyor

       nesne.transform.localScale = vector; //Sorunsuz çalışıyor
       GameObject.Find("Quad_Video5").gameObject.GetComponent<VideoPlayer>().Stop(); //Sorunsuz çalışıyor
   }

   public void TargetFind()
   {
       Buton_Play.gameObject.SetActive(true); //Sorunsuz çalışıyor
       ButtonUp.gameObject.SetActive(true); ///NullReferenceException uyarısı veriyor
   }


Sahnedeki nesnelerim:
resim

QuadVideo5 e ait Inspector ve ScaleScript değişkenleri. Aslında burada birşey fark ediyorum. Uygulama başladıktan sanki TargetFing() fonksiyonu çalışır çalışmaz Button_Down içerisine sürükle bırak yaptığım obje kayboluyor ve orada
Fonksiyon çalışmadan önce
resim

Fonksiyon Çalıştıktan sonra: Gördüğünüz gibi Game Obje Boş... 

   

This is Error:
resim

Bu durumu nasıl düzeltebilirim.

Teşekkür ederim.

Bu arada birşey fark ettim. Uygulama başladıktan sanki TargetFing() fonksiyonu çalışır çalışmaz Button_Down içerisine sürükle bırak yaptığım obje kayboluyor ve orada
Fonksiyon çalışmadan öncesi 
resim
Fonksiyon Çalıştıktan sonra: Gördüğünüz gibi Game Obje Boş…
resim
  Cevapla
#2
Merhaba,

Söz konusu butonları hem public yapıp sürükle bırak yöntemiyle referans göstermişsiniz, hem de Start fonksiyonunda Find ile bularak referanslamışsınız.

Start'taki iki satır:


Kod:
       ButtonDown = GameObject.Find("Button_Down");
       ButtonUp = GameObject.Find("Button_Up");


Bu iki satırı Start'tan silerseniz sanırım sorun çözülecektir.
  Cevapla
#3
(30-03-2020, Saat: 22:50)mtat0640 Nickli Kullanıcıdan Alıntı: Linkleri görüntüleyebilmek için Kayıt ol manız veya Giriş yapmanız gerekiyor.Anlayışınız için teşekkürler.!Merhaba,

Söz konusu butonları hem public yapıp sürükle bırak yöntemiyle referans göstermişsiniz, hem de Start fonksiyonunda Find ile bularak referanslamışsınız.

Start'taki iki satır:


Kod:
       ButtonDown = GameObject.Find("Button_Down");
       ButtonUp = GameObject.Find("Button_Up");


Bu iki satırı Start'tan silerseniz sanırım sorun çözülecektir.

Merhaba,

Evet bu şekilde çözüldü sorun çok teşekkür ederim. Peki bu neden sorun yaratıyor? 

Sorunun bu şekilde çözüleceğine hiç ihtimal veremiştim çünkü PlayButonu da aynı şekilde tanımlanmıştı ancak Playbutonu hata vermiyor. Tam olarak bunun mantığı nedir onu kavramaya çalışıyorum aslında. 

2. olarak şunu da sormak isterim:

Biz böyle GameObject çağıracağımız projeleri sürekli public olarak tanımlayıp sonra da inspector ekranına sahneden sürükle bırak yapmak zorunda mıyız?

Yani sürükle bırak yapmadan ben istediğim objeyi kod satırları ile çağırıp çalıştıramaz mıyım? 

Yardımınız için teşekkür ederim.
  Cevapla
#4
Rica ederim.

1. sorunuz, emin değilim fakat iki ayrı referans verdiğiniz için çakışıp hataya düşüyor olabilir. Veya kod satırı ile verdiğiniz referansta hata olabilir, yani Find methodu aradığı objeyi bulamıyor olabilir.

2. sorunuz, public yapıp referans vermek zorunda değilsiniz. Private yapıp Find methodu ile nesneyi buldurabilirsiniz. Yani yukarıdaki cevaptaki sildiğiniz iki satırı silmek yerine ilgili Gameobject lerin public kısmını silerseniz öyle yapmış olursunuz.

İyi çalışmalar.
  Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  GameObject'e Canvas ekleyince boyutunun çok büyük olması problemi drdoof 2 383 24-05-2020, Saat: 23:24
Son Yorum: drdoof
  NullReferenceException Hatası Dovahkiin 1 376 15-04-2020, Saat: 21:09
Son Yorum: Dovahkiin
  Unity Ugulama için yardım Hayubiq 1 516 24-11-2019, Saat: 12:13
Son Yorum: abayir41
  Slider ile gameobject konumu ayarlama batuhantstkn 1 646 18-05-2019, Saat: 20:10
Son Yorum: abayir41
  Unity için C# kitap/video dersleri Enesk001 2 795 20-03-2019, Saat: 16:16
Son Yorum: Enesk001

Hızlı Menü:


Konuyu Okuyanlar: 1 Ziyaretçi