Şimdi Ara

Playerprefs yardımı!

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
15
Cevap
0
Favori
338
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Playerprefs ile ilgili bir kod yazdım ama bu kodu başka sahnede farklı scriptle yapınca kod bozuluyor

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEngine.UI;

    public class cc : MonoBehaviour
    {
    public Button cık;
    public GameObject madam;
    private int ButtonVal;
    public Button cıky;
    public GameObject madamy;
    private int ButtonValy;
    public Button cıkd;
    public GameObject madamd;
    private int ButtonVald;
    public Button cıkp;
    public Button madamp;
    private int ButtonValp;
    public Button cıkl;
    public GameObject madaml;
    private int ButtonVall;
    public Button cıkm;
    public GameObject madamm;
    private int ButtonValm;
    public Button cıkt;
    public Button madamt;
    private int ButtonValt;



    void Start()
    {
    ButtonVal = PlayerPrefs.GetInt("ButtonSaved");
    Debug.Log("ButtonValue" + ButtonVal);
    ButtonValy = PlayerPrefs.GetInt("ButtonSaved");
    Debug.Log("ButtonValue" + ButtonValy);
    ButtonVald = PlayerPrefs.GetInt("ButtonSaved");
    Debug.Log("ButtonValue" + ButtonVald);
    ButtonValp = PlayerPrefs.GetInt("ButtonSaved");
    Debug.Log("ButtonValue" + ButtonValp);
    ButtonVall = PlayerPrefs.GetInt("ButtonSaved");
    Debug.Log("ButtonValue" + ButtonVall);
    ButtonValm = PlayerPrefs.GetInt("ButtonSaved");
    Debug.Log("ButtonValue" + ButtonValm);
    ButtonValt = PlayerPrefs.GetInt("ButtonSaved");
    Debug.Log("ButtonValue" + ButtonValt);
    }


    void Update()
    {


    if (ButtonVal == 32)
    {
    madam.SetActive(true);
    cık.GetComponent<Button>().interactable = false;
    }

    if (ButtonVal != 32)
    {
    madam.SetActive(false);
    cık.GetComponent<Button>().interactable = true;
    }

    if (GlobalCash.CashCount < 2)
    {
    cık.GetComponent<Button>().interactable = false;
    }
    else
    {
    cık.GetComponent<Button>().interactable = true;
    }
    if (ButtonValy == 32)
    {
    madamy.SetActive(true);
    cıky.GetComponent<Button>().interactable = false;
    }

    if (ButtonValy != 32)
    {
    madamy.SetActive(false);
    cıky.GetComponent<Button>().interactable = true;
    }

    if (GlobalCash.CashCount < 2)
    {
    cıky.GetComponent<Button>().interactable = false;
    }
    else
    {
    cıky.GetComponent<Button>().interactable = true;
    }
    if (madam.activeSelf == false)
    {
    cıky.GetComponent<Button>().interactable = false;
    }
    if (ButtonVald == 32)
    {
    madamd.SetActive(true);
    cıkd.GetComponent<Button>().interactable = false;
    }

    if (ButtonVald != 32)
    {
    madamd.SetActive(false);
    cıkd.GetComponent<Button>().interactable = true;
    }

    if (GlobalCash.CashCount < 2)
    {
    cıkd.GetComponent<Button>().interactable = false;
    }
    else
    {
    cıkd.GetComponent<Button>().interactable = true;
    }
    if (madam.activeSelf == false)
    {
    cıkd.GetComponent<Button>().interactable = false;
    }
    if (ButtonValp == 32)
    {
    madamp.GetComponent<Button>().interactable = true;
    cıkp.GetComponent<Button>().interactable = false;
    }

    if (ButtonValp != 32)
    {
    madamp.GetComponent<Button>().interactable = false;
    cıkp.GetComponent<Button>().interactable = true;
    }

    if (GlobalCash.CashCount < 2)
    {
    cıkp.GetComponent<Button>().interactable = false;
    }
    else
    {
    cıkp.GetComponent<Button>().interactable = true;
    }
    if (madam.activeSelf == false)
    {
    cıkp.GetComponent<Button>().interactable = false;
    }
    if (ButtonVall == 32)
    {
    madaml.SetActive(true);
    cıkl.GetComponent<Button>().interactable = false;
    }

    if (ButtonVall != 32)
    {
    madaml.SetActive(false);
    cıkl.GetComponent<Button>().interactable = true;
    }

    if (GlobalCash.CashCount < 2)
    {
    cıkl.GetComponent<Button>().interactable = false;
    }
    else
    {
    cıkl.GetComponent<Button>().interactable = true;
    }
    if (madam.activeSelf == false)
    {
    cıkl.GetComponent<Button>().interactable = false;
    }
    if (ButtonValm == 32)
    {
    madamm.SetActive(true);
    cıkm.GetComponent<Button>().interactable = false;
    }

    if (ButtonValm != 32)
    {
    madamm.SetActive(false);
    cıkm.GetComponent<Button>().interactable = true;
    }

    if (GlobalCash.CashCount < 2)
    {
    cıkm.GetComponent<Button>().interactable = false;
    }
    else
    {
    cıkm.GetComponent<Button>().interactable = true;
    }
    if (madam.activeSelf == false)
    {
    cıkm.GetComponent<Button>().interactable = false;
    }
    if (ButtonValt == 32)
    {
    madamt.GetComponent<Button>().interactable = true;
    cıkt.GetComponent<Button>().interactable = false;
    }

    if (ButtonValt != 32)
    {
    madamt.GetComponent<Button>().interactable = false;
    cıkt.GetComponent<Button>().interactable = true;
    }

    if (GlobalCash.CashCount < 2)
    {
    cıkt.GetComponent<Button>().interactable = false;
    }
    else
    {
    cıkt.GetComponent<Button>().interactable = true;
    }
    if (madam.activeSelf == false)
    {
    cıkt.GetComponent<Button>().interactable = false;
    }
    }
    public void Can()
    {

    ButtonVal = 32;
    PlayerPrefs.SetInt("ButtonSaved", ButtonVal);
    Debug.Log("ButtonValue" + ButtonVal);
    GlobalCash.CashCount -= 2;

    }
    public void Cany()
    {

    ButtonValy = 32;
    PlayerPrefs.SetInt("ButtonSaved", ButtonValy);
    Debug.Log("ButtonValue" + ButtonValy);
    GlobalCash.CashCount -= 2;

    }
    public void Cand()
    {

    ButtonVald = 32;
    PlayerPrefs.SetInt("ButtonSaved", ButtonVald);
    Debug.Log("ButtonValue" + ButtonVald);
    GlobalCash.CashCount -= 2;

    }
    public void Canp()
    {

    ButtonValp = 32;
    PlayerPrefs.SetInt("ButtonSaved", ButtonValp);
    Debug.Log("ButtonValue" + ButtonValp);
    GlobalCash.CashCount -= 2;

    }
    public void Canl()
    {

    ButtonVall = 32;
    PlayerPrefs.SetInt("ButtonSaved", ButtonVall);
    Debug.Log("ButtonValue" + ButtonVall);
    GlobalCash.CashCount -= 2;

    }
    public void Canm()
    {

    ButtonValm = 32;
    PlayerPrefs.SetInt("ButtonSaved", ButtonValm);
    Debug.Log("ButtonValue" + ButtonValm);
    GlobalCash.CashCount -= 2;

    }
    public void Cant()
    {

    ButtonValt = 32;
    PlayerPrefs.SetInt("ButtonSaved", ButtonValt);
    Debug.Log("ButtonValue" + ButtonValt);
    GlobalCash.CashCount -= 2;

    }
    }

    bu kodun aynısını başka sahneye başka scripte kopyalıyıp çalıştırınca bozuluyor birini active edince diğer sahnedeki butonlarda active oluyor buna bir çözüm bulabilir misiniz?







  • PlayerPrefs.SetInt("ButtonSaved_"+SceneManager.GetActiveScene().buildIndex, ButtonValt); mantığıyla yapabilirsin her sahnede kullanmak için.
    Startda for ile eşitleyip alırsın.
  • bu işlere yeni başladım pek kod bilgim yok bu kodu da burda buldum 5 -10 satırlık bir kod yazarsan sevinirim.
  • Hocam örneğin start fonksiyonunda böyle yazmışsınız

    ButtonVal=PlayerPrefs.GetInt("ButtonSaved)


    ButtonVal=PlayerPrefs.GetInt("ButtonSaved"+SceneManager.GetActiveScene().buildIndex) şeklinde değiştireceksiniz yani +SceneManager.GetActiveScene().buildIndex ekleyeceksiniz tüm startdaki player preflere.
    Aynı şekilde tüm updatedeki playerpreflerede ekleyeceksiniz üstteki mesajda attığım gibi.
  • ama bu seferde sahne değiştiğinde önceki sahnedeki aktif butonlar pasif oluyor.
  • Muhtemelen direk her şeyi kopyala-yapıştır yaptığın için script adı falan uyuşmuyor olabilir,

    En baştaki "public class cc : MonoBehaviour" denilen yerde "class cc" kısmını attığınız scriptin ismi ne ise onla değiştirin.

    Bunun dışında kodlarda bir hata göremedim de ben şunu da pek anlamadım aynı anda 2 sahne nasıl açık oluyor ki, diğer sahneyi etkilesin o kod?

    Sorunuzu biraz daha detaylı ve ne yapmak istediğinizi gösterir şekilde açıklarsanız iyi olur.
  • Crax546 C kullanıcısına yanıt
    Konuda istediğin bu değil mi zaten
  • Yapay Zeka’dan İlgili Konular
    Mp3 indirme yardımı
    12 yıl önce açıldı
    Daha Fazla Göster
  • 1-

    Playerprefs yardımı!

    2- Tıkladım

    Playerprefs yardımı!

    3- Yeni sahneye geçtim (Dikdörtgen butonla)

    Playerprefs yardımı!

    4- Tıkladım

    Playerprefs yardımı!

    5- Geri döndüm (Dikdörtgen butonla)

    Playerprefs yardımı!

    Buton kodu (Sahne değiştirme) :

    Playerprefs yardımı!

    diğer kodlar :

    Playerprefs yardımı!

    Playerprefs yardımı!

    deneme amaçlı kodlardır!



    < Bu mesaj bu kişi tarafından değiştirildi Crax546 -- 3 Haziran 2020; 17:52:9 >




  • Doubleimp kullanıcısına yanıt
    hayır benim butona tıkladığımda resim açılıcak ve resmi kaydedicek birşey lazımdı buldum ama aynısından bir tane daha yapmam gerekti yaptım ama ikisi arasında sahne geçişi yapınca aktif olan resimler pasif oldu.
  • quote:

    Orijinalden alıntı: Crax546

    hayır benim butona tıkladığımda resim açılıcak ve resmi kaydedicek birşey lazımdı buldum ama aynısından bir tane daha yapmam gerekti yaptım ama ikisi arasında sahne geçişi yapınca aktif olan resimler pasif oldu.
    "DontDestroyOnLoad" kalıbına bir göz atın Google'dan. Sanırım aradığınız şey böyle bir şey. Sahne geçişlerinde bir önceki sahnede yer alan objeler kapanır zaten. Siz bunları söylediğim kalıpla diğer sahneye taşıyabilirsiniz ancak.
  • Fulton F kullanıcısına yanıt
    DontDestroyOnLoada baktım ama bu 2.sahneye geçince de resim kaybolmuyor

    bana 1 sahnede butonu aktif ettirdiğimde resim orada kalacak 2. sahneden 1. sahneye geçtiğimde 1. sahneden kaybolmayacak.
  • Fulton F kullanıcısına yanıt
    Yani sahneler arası geçiş olduğunda 1.Sahnedeki resim 1.sahnede aktif 2.sahnede ki resim 2.sahnede durucak ben aralarında geçiş yapınca kaybolmayacak.
  • quote:

    Orijinalden alıntı: Crax546

    DontDestroyOnLoada baktım ama bu 2.sahneye geçince de resim kaybolmuyor

    bana 1 sahnede butonu aktif ettirdiğimde resim orada kalacak 2. sahneden 1. sahneye geçtiğimde 1. sahneden kaybolmayacak.
    "2. sahneden 1. sahneye geçtiğimde 1. sahneden kaybolmayacak."

    İşte bunu normal şartlarda yapamazsınız. Ben anladım ne istediğinizi sanırım. Şimdi size kaba taslak algoritmayı söyleyeyim onu yapmaya çalışın:

    - Önce boş bir obje oluşturup bu scriptinizi o objeye atın ve işlemleri oradan yürütün.
    - Bu objeyi DontDestroyOnLoad ile sahne geçişlerinde kaybolmayacak şekilde ayarlayın.
    - Örneğin 1. sahnedeki butona basıp oradaki resmi aktif ettiniz diyelim. Bunu artık projenize göre PlayerPrefs SetString ile "açık" ya da "kapalı" şeklinde boolean tarzında kaydedin. Ya da SetInt yapıp "1", "0" gibi açık-kapalı durumunu temsil edecek şekilde de yapabilirsiniz.
    - Her sahnenin başlangıcında (Awake fonksiyonu içerisinde olabilir) bu açık - kapalı olma durumunu if-else ile PlayerPrefs GetString (veya GetInt, nasıl yaptıysanız) yaparak kontrol edin. Açıksa o objeyi açın.
    - Burada şöyle bir sıkıntı olabilir mesela sahne 1'den sahne 2'ye geçince scriptte sahne 1'deki objeyi bulamaz ve hata verebilir. Bu yüzden objeleri tanımlarken public yapıp Inspector'dan sürükle-bırak yapmayın, "Gameobject.Find" ile tanımlayın.
    - Üstteki söylediğim Awake fonksiyonunda da örneğin arka arkaya 2 tane "if" ile 1. ve 2. sahnedeki resimleri var mı diye kontrol edin. 2. sahnedeyseniz 1. sahnedeki resim olmayacağı için 1'nci if'te kontrol false döner ve 2. if'e geçer 2'nci sahnedeki resim var olacağı için içinde if-else ile PlayerPrefs GetString ve diğer olayları yaparsınız.


    Son madde biraz karışık gelebilir, umarım anlatabilmişimdir.



    < Bu mesaj bu kişi tarafından değiştirildi Fulton -- 3 Haziran 2020; 19:19:19 >




  • Fulton F kullanıcısına yanıt
    Sağol
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.