Çözüldü Unity sahneler arası veri çekme nasıl yapılır?

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.

Tunahan Arık

Hectopat
Katılım
22 Ağustos 2020
Mesajlar
560
Çözümler
3
Merhaba, Unity'de ilk sahnede input field ile kullancıdan bir sayı girmesini istiyorum. Sayıyı girdikten sonra devam butonuna basarak farklı bir sahneye geçiyor. Geçtiği sahnede, ilk sahnede girmiş olduğu sayıyı nasıl çekebilirim? Değere static parametresi atamamı söylediler fakat beceremedim. Yardımcı olabilir misiniz?
 
Son düzenleyen: Moderatör:
Çözüm
Kod:
    private static SingletonKod obje = null;
 
    void Awake()
    {
        if( obje == null )
        {
            obje = this;
            DontDestroyOnLoad( this );
        }
        else if( this != obje )
        {
            Destroy( gameObject );
        }
    }
Don't Destroy On Load aradığın metod. Şurayı detaylı inceleyebilirsin.
GetInput'da min ve max'ı hiç atamamışsın ki?
Ayrıca GetRandomNumber metodunda min max yazmışsın ama en düşük ve en yüksek değerin bir eksiği arasında rastgele bir defa sayı verir sana, yine GameLogic'de metodu hiç çağırmamışsın.
 
Getınput'damin ve Max'ı hiç atamamışsın ki?
Ayrıca getrandomnumber metodundamin Max yazmışsın ama o değerler arasında 1 sayı verir sana bu sadece yine Gamelogic'de metodu hiç çağırmamışsın.

Açıkçası 3 gün falan oldu yeni öğrenmeye çalışıyorum videolardan vs. izleyerek yapmaya çalışıyorum çok bildiğimi söyleyemem :D. GetInput'taki minimum ve maximum değerini direkt olarak GameLogic'teki Min ve Max değeri olarak göstermek için ne yapmam gerekiyor? Girilen değerler arasında 1 sayıyı oyuna tutturup, kullanıcıdan bu sayıyı tahmin etmeye çalışmasını isteyeceğim oyunun amacı o aslında. GameLogic'te çağırmıştım şu kısımda:

C#:
    private void ResetGame(){
        randomNumber = GetRandomNumber(yinputmin, yinputmax);
    }
 
C#:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;

public class GameLogic : MonoBehaviour.
{
 public static int yinputmin = RastgeleSayiUretmeMetodu();
 public static int yinputmax = RastgeleSayiUretmeMetodu();

    void Awake()
    {ResetGame();}
    private void ResetGame(){
         yinputmin = RastgeleSayiUretmeMetodu();
          yinputmax = RastgeleSayiUretmeMetodu();
    }

 private void RastgeleSayiUretmeMetodu ()
 {
     var RastgeleSayiSinifiOrneklemesi = new Random();//Sınıf örneklemesi
     //int rastgeleSayi= RastgeleSayiSinifiOrneklemesi.Next(min,max);
     int rastgeleSayi= RastgeleSayiSinifiOrneklemesi.Next(0,100);//0-99 arasında bir sayı verir
     return rastgeleSayi;
     //Örnek Sınıf kullanımı
     //int sayi= RastgeleSayiUretmeMetodu();
 }
}

C# Sınıflar arasında değişken veri kullanma.
C#:
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;

public class GetInput : MonoBehaviour.
{
 public static int inputmin;
 public static int inputmax;
 public GameLogic gc; // kullanmak istediğin sınıfa referans vereceksin

void Start(){
 GetMaxValue();
 GetMinValue();
}
 public void Continue(){
 SceneManager.LoadScene(2);
 }

 public void GetMaxValue()
 {
 inputmax = gc.yinputmax; //referans verdiğin sınıfı bu şekilde kullanacaksın
 Debug.Log("Maximum value is: " + inputmax);
 }

 public void GetMinValue(){
 inputmin = gc.yinputmin;
 Debug.Log("Minimum value is: " + inputmin);
 }
}

İstediğin kod bu ama void Start() {...} içerisinde resetleme işlemini çağırırsan sayılar her sahne başı resetlenir. Onun yerine Awake içerisinde çağırırsan oyun başında sadece bir kere resetlemiş olursun. Butona falan atarsın sonra istersen.

Awake --> Oyun başında sadece 1 defa çağırılır.
Start --> Her seviye yüklenmesinde çağırılır.
OnEnable --> Nesne her etkinleştirildiğinde çağırılır.
FixedUpdate --> Her fizik animasyonu sırasında çağırılır.
 
Son düzenleme:
C#:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;

public class GameLogic : MonoBehaviour.
{
 public static int yinputmin = RastgeleSayiUretmeMetodu();
 public static int yinputmax = RastgeleSayiUretmeMetodu();

 void Awake()
 {ResetGame();}
 private void ResetGame(){
 yinputmin = RastgeleSayiUretmeMetodu();
 yinputmax = RastgeleSayiUretmeMetodu();
 }

 private void RastgeleSayiUretmeMetodu ()
 {
 var RastgeleSayiSinifiOrneklemesi = new Random();//Sınıf örneklemesi.
 //int rastgeleSayi= RastgeleSayiSinifiOrneklemesi.Next(min,max);
 int rastgeleSayi= RastgeleSayiSinifiOrneklemesi.Next(0,100);//0-99 arasında bir sayı verir.
 return rastgeleSayi;
 //Örnek Sınıf kullanımı.
 //int sayi= RastgeleSayiUretmeMetodu();
 }
}

C# sınıflar arasında değişken veri kullanma.
C#:
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;

public class GetInput : MonoBehaviour.
{
 public static int inputmin;
 public static int inputmax;
 public GameLogic gc; // kullanmak istediğin sınıfa referans vereceksin.

void Start(){
 GetMaxValue();
 GetMinValue();
}
 public void Continue(){
 SceneManager.LoadScene(2);
 }

 public void GetMaxValue()
 {
 inputmax = gc.yinputmax; //referans verdiğin sınıfı bu şekilde kullanacaksın.
 Debug.Log("Maximum value is: " + inputmax);
 }

 public void GetMinValue(){
 inputmin = gc.yinputmin;
 Debug.Log("Minimum value is: " + inputmin);
 }
}

İstediğin kod bu ama Void Start() {...} içerisinde resetleme işlemini çağırırsan sayılar her sahne başı resetlenir. Onun yerine Awake içerisinde çağırırsan oyun başında sadece bir kere resetlemiş olursun. Butona falan atarsın sonra istersen.

Awake --> oyun başında sadece 1 defa çağırılır.
Start --> her seviye yüklenmesinde çağırılır.
Onenable --> nesne her etkinleştirildiğinde çağırılır.
Fixedupdate --> her fizik animasyonu sırasında çağırılır.

Çok teşekkür ederim o7.
 

Geri
Yukarı