Unity 3D TR Forum

Orjinalini görmek için tıklayınız: GameObject için NullReferenceException Uyarısı
Şu anda (Arşiv) modunu görüntülemektesiniz. Orjinal Sürümü Görüntüle internal link
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ş... 

[attachment=80]

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
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.
(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.
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.