• 11-09-2019, 17:10:08
    #1
    Merhaba;

    " Level " adlı scriptimde public Gameobject lostMenu adlı bir nesnem var ve süre bitiğinde yenildiğinde falan bu SetActive(true) ile gösteriliyor

    Fakat yeni bir scriptte bu menüyü göstermem lazım

    " BlackHole " adlı scriptimden bu menüye

    GameObject lostMenu;
    lostMenu = GetComponent<Level9>().lostMenu;
    şeklinde ulaşıp

    lostMenu.SetActive(true);
    şeklinde göstermeye çalıştım fakat şu hatayı aldım

    NullReferenceException: Object reference not set to an instance of an object

    daha sonra lost menüye tag ekleyerek tag ile çağırmaya çalışım yine olmadı...

    Bu Sorunu nasıl halledebilirim?
  • 11-09-2019, 17:20:36
    #2
    Öncelikle merhabalar.

    lostMenu gameobjecti veya scripti bulamıyor.

    lostMenu diye bir tag oluşturup menünüze bu tagı ekleyin sonrasında ise

    GameObject lostMenu = GameObject.FindGameObjectWithTag("lostmenu");
    lostMenu.SetActive(true);

    olarak deneyin.
  • 11-09-2019, 17:32:46
    #3
    Archetype adlı üyeden alıntı: mesajı görüntüle
    Öncelikle merhabalar.

    lostMenu gameobjecti veya scripti bulamıyor.

    lostMenu diye bir tag oluşturup menünüze bu tagı ekleyin sonrasında ise

    GameObject lostMenu = GameObject.FindGameObjectWithTag("lostmenu");
    lostMenu.SetActive(true);

    olarak deneyin.
    Teşekkürler

    Fakat bunu denemiştim birdaha deneyeyim dedim yine bulamadı sonra tam tersi şekli uyguladım yani lost menüyü açtım oyun başladığındada SetActive(false) ile gizlemeye çalıştım oldu...
    Yani nesne gizliyken tagı dahi olsa görmüyor nesne gizli değilken sorun yok...

    Ama gizli haldeyken o nesneyi bulmam gerekiyor...

    lostMenu'yü public olarak tanımlayıp elle atayıp göstermekten başka çare yok mudur ? Gizli nesnelere ulaşmanın bir yolu ?
  • 11-09-2019, 18:20:46
    #4
    Timeispassing adlı üyeden alıntı: mesajı görüntüle
    Teşekkürler

    Fakat bunu denemiştim birdaha deneyeyim dedim yine bulamadı sonra tam tersi şekli uyguladım yani lost menüyü açtım oyun başladığındada SetActive(false) ile gizlemeye çalıştım oldu...
    Yani nesne gizliyken tagı dahi olsa görmüyor nesne gizli değilken sorun yok...

    Ama gizli haldeyken o nesneyi bulmam gerekiyor...

    lostMenu'yü public olarak tanımlayıp elle atayıp göstermekten başka çare yok mudur ? Gizli nesnelere ulaşmanın bir yolu ?

    elle atarsanız performans açısından da daha iyi olur. başka bir yolu var mı bilmiyorum anladığım kadarı ile birden fazla menüye sahipsiniz array oluşturup array içerisinden kapayıp açabilirsiniz. ayrıca elle atadığınız menüyü kod ile yapmadan da kendiniz disable edebilirsiniz.
  • 11-09-2019, 19:26:43
    #5
    public class GameContoller : MonoBehavior{
    
    public static GameController instance;
    public GameObject lostMenu;
    
    void Awake ()
    {
    if(instance==null)
    instance=this;
    }
    
    public void ShowLostMenu()
    {
    lostMenu.SetActive(true);
    }
    
    public void HideLostMenu()
    {
    lostMenu.SetActive(false);
    }
    
    }
    Ben bir game controller objesi oluşturuyorum hierarchy'de, bu tip işlerin kodlarını orada yazıyorum. Sonrada instance ile her yerden çağırıyorum. Örneğin:

    public class PlayerContoller : MonoBehavior{
    
    void OnCollisionEnter2D(Collision2D other){
    
    if (other.gameObject.CompareTag ("Enemy"))
    {
    GameContoller.instance.ShowLostMenu();
    }
    
    }
    
    }
  • 12-09-2019, 12:32:39
    #6
    Şöyle yapabilirsiniz; Level scriptin içinde
    public Gameobject LasMenu
    public static Gameobject LM tanımlarsınız, başlangıçta Start() fonksiyonunun içinde
    LM=lastMenu; atamasını yaparsınız. Sonra BlackHole scripti içerisinden
    Level.LM.SetActive(True) şeklinde gösterebilirsiniz.
  • 13-09-2019, 05:59:30
    #7
    Merhaba, çözüme ulaşmazsa pm atın lütfen. Gerekirse tv ile bağlanır hallederiz