• 28-05-2019, 08:21:29
    #1
    Kimlik doğrulama veya yönetimden onay bekliyor.
    Merhaba,

    Unity 2019.3'ü indirdiğimden beri farklı aynı oyun dosyası içerisindeki farklı scriptlerden veri çekemiyorum. Diğer classları görmüyor. Nesne üretmeyi başarsam bile hata vermiyor ama çektiği değeri null yani boş olarak görüyor. Başına gelen veya çözümünü bilen var mı? Yabancı kaynaklarda bulamadım.

    Edit:
    Örnek Kod:


    // Ulaşılacak kod
    public class gameController : MonoBehaviour
    {
     public void GameOver()
    {
    scorePanel.SetActive(false);
    endScore.text = "Height: " + score;
    endScorePanelAnim.Play("OyunSonuMenuAnim");
    }
    
    //ulaşmaya çalıştığım kod
    
    public class Player : MonoBehaviour
    {
    
    public gameController gameControllerInstance;
    
    void Start()
    {
    
    gameControllerInstance = GetComponent<gameController>();
    
    }
    
    void playerDied()
    {
    audioKill.PlayOneShot(deadSound);
    isalive = false;
    
    if(transform.position.x > 0)
    {
    anim.Play("playerDeadRight");
    }
    
    else
    {
    anim.Play("playerDeadLeft");
    }
    
    gameControllerInstance.GameOver();
    
    Time.timeScale = 0;
        }
  • 28-05-2019, 11:49:53
    #2
    Konsoldaki hatayı, ulaşamadığınız scripti ve ulaşmak için yazdığınız kodu paylaşırsanız daha hızlı yardım alırsınız diye düşünüyorum.
  • 01-06-2019, 02:34:21
    #3
    Tasaranadam adlı üyeden alıntı: mesajı görüntüle
    Konsoldaki hatayı, ulaşamadığınız scripti ve ulaşmak için yazdığınız kodu paylaşırsanız daha hızlı yardım alırsınız diye düşünüyorum.
    Hocam bir hata vermiyor. Visual Studio üzerinde de bir hata yok. Normal kendi kendine tamamlıyor, ulaşabiliyorum. Kodu yazıyorum fakat oyunda ulaştığım değişken ya da metod null değer döndürüyor
  • 01-06-2019, 04:14:31
    #4
    GetComponent methodunun doğru bir instance döndürebilmesi için, GetComponent çağrısı yapan ve döndürülmesi istenen sınıflar aynı gameObjecte olması gerekir.
    gameObject.AddComponent<gameOverController>() methodu çağrılarak component eklenebilir.
  • 01-06-2019, 04:20:46
    #5
    Peki benim anlamadığım şu, bunun birkaç farklı çeşidini de denedim. Madem boş döndürecek nasıl oluyor da hata vermeden erişiyor metoda? O zaman erişememesi gerekmiyor mu?



    Playablegraphs adlı üyeden alıntı: mesajı görüntüle
    GetComponent methodunun doğru bir instance döndürebilmesi için, GetComponent çağrısı yapan ve döndürülmesi istenen sınıflar aynı gameObjecte olması gerekir.
    gameObject.AddComponent<gameOverController>() methodu çağrılarak component eklenebilir.
    Bu arada cevap için teşekkür ederim, programdan kaynaklandığını düşünmeye başlamıştım. Aynı gameobjectte olup olmaması konusu, baya kafamda oturttu şuan. Sağol
  • 01-06-2019, 12:49:22
    #6
    delamis adlı üyeden alıntı: mesajı görüntüle
    Hocam bir hata vermiyor. Visual Studio üzerinde de bir hata yok. Normal kendi kendine tamamlıyor, ulaşabiliyorum. Kodu yazıyorum fakat oyunda ulaştığım değişken ya da metod null değer döndürüyor
    Sanırım Hierarchy'de GameController objectin var ve bu scripti de ona ekliyorsun. Ve başka bir scriptten bu script içerisindeki bir metodu instance ediyorsun, veya bunu amaçlıyorsun ama null dönüyor. Eğer amacın buysa aşağıdaki kodu kullan, GameController içerisindeki kodları instance edebilirsin diğer scriptlerden.

    public class GameController : MonoBehaviour {
    
    public static GameController instance;
    
    void Awake()
    {
    if (instance == null)
    instance = this;
    }
    
    }
  • 01-06-2019, 12:54:29
    #7
    Tasaranadam adlı üyeden alıntı: mesajı görüntüle
    Sanırım Hierarchy'de GameController objectin var ve bu scripti de ona ekliyorsun. Ve başka bir scriptten bu script içerisindeki bir metodu instance ediyorsun, veya bunu amaçlıyorsun ama null dönüyor. Eğer amacın buysa aşağıdaki kodu kullan, GameController içerisindeki kodları instance edebilirsin diğer scriptlerden.

    public class GameController : MonoBehaviour {
    
    public static GameController instance;
    
    void Awake()
    {
    if (instance == null)
    instance = this;
    }
    
    }
    Bu problemi çözdü teşekkür ederim, kafamı kurcalayan daha önce yaptığım şeyin neden olmadığıydı. O soruya da @Playablegraphs; cevap verdi. Mevzu iyice oturdu kafama. Teşekkür ediyorum @Tasaranadam;
  • 01-06-2019, 13:27:51
    #8
    delamis adlı üyeden alıntı: mesajı görüntüle
    Peki benim anlamadığım şu, bunun birkaç farklı çeşidini de denedim. Madem boş döndürecek nasıl oluyor da hata vermeden erişiyor metoda? O zaman erişememesi gerekmiyor mu? l
    Visual studio üzerinde classlara erişim sağlayabilirsin. Classlar içerisindeki public fonksiyonları ise çağırabilirsin ancak unity yapısı gereği çağırabiliyor olmak onu o şekilde kullanabiliyor olmamızı sağlamaz
  • 01-06-2019, 13:33:00
    #9
    unitydeveloper adlı üyeden alıntı: mesajı görüntüle
    Visual studio üzerinde classlara erişim sağlayabilirsin. Classlar içerisindeki public fonksiyonları ise çağırabilirsin ancak unity yapısı gereği çağırabiliyor olmak onu o şekilde kullanabiliyor olmamızı sağlamaz
    Evet deneyimleyip bir sürü zaman kaybederek çok iyi anladım teşekkürler @unitydeveloper;