Unity Dil Ayarlarını Tüm Sahnelere Uygulamak

yigidyum

Kilopat
Moderatör
Katılım
24 Ağustos 2017
Mesajlar
2.389
Makaleler
1
Çözümler
6
Yeniden merhaba. Oyunum için menüye İngilizce dil eklemiştim. Ancak sadece menü için geçerli. Ben durdurma paneline, ölüm paneline de dil eklemek istiyorum. (yani diğer sahnelere de) @Predator Titan bir önceki dil konusunda yine bu soruyu sordum fakat son mesajla birleştiği için bildirim gelmedi sanırım.

Kodların son halleri;
dilAktif.cs
dil.cs
 
Çözüm
DİL.CS İÇİN >

Kod:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class dil : MonoBehaviour
{

    public int Menüdeger = 0;
    public int Durdurmadeger = 0;
    public int Olmedeger = 0;

    public bool ingilizce;
    public bool türkce;

    public bool durduma_ingilizce;
    public bool durdurma_türkce;

    public bool ölme_ingilizce;
    public bool ölme_türkce;


 
    void Start()
    {
        //Oyunu, oyun motorunu(unity i yani) kapatsanız dâhi yaptığınız, seçtiğiniz son değişiklikleri kaydeden kod aşağıdadır.
        Menüdeger = PlayerPrefs.GetInt("Mdeger");
        Durdurmadeger = PlayerPrefs.GetInt("Ddeger");
        Olmedeger = PlayerPrefs.GetInt("Odeger");
    }
    void Update()
    {
        if (Menüdeger == 1)
        {
          
            ingilizce = true;
            türkce = false;
        }
        if (Menüdeger == 2)
        {
      
            türkce = true;
            ingilizce = false;
        }


        if (Durdurmadeger == 1)
        {
      
            durduma_ingilizce = true;
            durdurma_türkce = false;
        }
        if (Durdurmadeger == 2)
        {
            
            durdurma_türkce = true;
            durduma_ingilizce = false;
        }


        if (Olmedeger == 1)
        {
            
            ölme_ingilizce = true;
            ölme_türkce = false;
        }
        if (Olmedeger == 2)
        {
        
            ölme_türkce = true;
            ölme_ingilizce = false;
        }
      
    }

    public void IngilizceButton()
    {
        Menüdeger = 1;
        PlayerPrefs.SetInt("Mdeger", Menüdeger);
    }
    public void TurkceButton()
    {
        Menüdeger = 2;
        PlayerPrefs.SetInt("Mdeger", Menüdeger);
    }

    //Durdurma sahnesi için bu aşağı da ki komutu, stop/durdurma tuşuna tanımlayın aynı yukarı da menü ye yaptığınız gibi.
    public void DurdurmaIngilizceButton()
    {
        Durdurmadeger = 1;
        PlayerPrefs.SetInt("Ddeger", Durdurmadeger);
    }
    public void DurdurmaTurkceButton()
    {
        Durdurmadeger = 2;
        PlayerPrefs.SetInt("Ddeger", Durdurmadeger);
    }


    //Ölme sahnesi için bu aşağı da ki komutu, ölme/yeniden doğma sanhesi tuşuna tanımlayın aynı yukarı da menü ye yaptığınız gibi.
    public void OlmeIngilizceButton()
    {
        Olmedeger = 1;
        PlayerPrefs.SetInt("Odeger", Olmedeger);
    }
    public void OlmeTurkceButton()
    {
        Olmedeger = 2;
        PlayerPrefs.SetInt("Odeger", Olmedeger);
    }


}

dilAktif.cs İÇİN >
Kod:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class dilAktif : MonoBehaviour {

    dil DenemeS;

    public GameObject DenemeCsObj;

    //Ana menü için
    public Text bolumSecText;
    public Text hikayeModText;
    public Text ozellistirmeText;
    public Text nasilOynanirText;
    public Text cıkText;

    public Text nasilText1;
    public Text nasilKontrollerText;
    public Text nasilDusmanlarTExt;

    void Start()
    {

        DenemeS = DenemeCsObj.GetComponent<dil>();

    }

    void Update()
    {
        if (DenemeS.ingilizce == true)
        {
            //Menü için
            bolumSecText.text = "Level Select";
            ozellistirmeText.text = "Customize (Coming Very Soon)";
            hikayeModText.text = "Story Mode (Coming Very Soon)";
            nasilOynanirText.text = "How To Play";
            cıkText.text = "Quit";
            //Nasıl için
            nasilText1.text = "How to play? You are welcome to play a game that adds a dimension to maze games. In this game, there are chapters in many places from the biggest cities to the Moon, from the Moon to the depths of the ocean.In these chapters, your aim is to hit the obstacles. How will you do that? Then lets come check it out.";
            nasilKontrollerText.text = "Controls; To control your character, you need to use the analog bar on the bottom left and the jump button on the bottom right.";
        }

        if (DenemeS.türkce == true)
        {
            //Menü için
            bolumSecText.text = "Bölüm Seç";
            ozellistirmeText.text = "Özelleştirme (Çok Yakında)";
            hikayeModText.text = "Hikaye Modu (Çok Yakında)";
            nasilOynanirText.text = "Nasıl Oynanır";
            cıkText.text = "Çık";
            //Nasıl için
            nasilText1.text = "Nasıl Oynanır? Labirent oyunlarına ayrı bir boyut katan oyunumuza hoşgeldiniz. Bu oyunda, en büyük şehirlerden, Aya, Aydan okyanusların derinliklerine kadar bir çok yerde geçen bölümler bulunmakta. Bu bölümlerde amacınız engellere çarpmayıp çıkışa ulaşmak.Bunu nasıl mı yapacaksınız? O zaman gelelim kontrollere.";
            nasilKontrollerText.text = "Kontroller; Karakterinizi kontrol etmek için sol alt taraftaki analog çubuğu ve sağ alt taraftaki zıplama butonunu kullanmanız gerekmekte.";
        }

        //DURDURMA EKRANI İÇİN AYARLAR-------------------------------------------------------
        if (DenemeS.durduma_ingilizce == true)
        {
         // BURAYA GİRİLECEK TEXT LERİ SİZİN AYARLAMANIZ LAZIM, NORMAL YUKARIDAN TEXT İLE DURDURMA EKRANINDA Kİ TEXTLERİ TANIMLAYIN   
        }

        if (DenemeS.durdurma_türkce == true)
        {
          // BURAYA GİRİLECEK TEXT LERİ SİZİN AYARLAMANIZ LAZIM, NORMAL YUKARIDAN TEXT İLE DURDURMA EKRANINDA Kİ TEXTLERİ TANIMLAYIN
        }


        //ÖLME/DEATH/YENİDEN BAŞLAMA EKRANI İÇİN AYARLAR-------------------------------------------------------
        if (DenemeS.ölme_ingilizce == true)
        {
            // BURAYA GİRİLECEK TEXT LERİ SİZİN AYARLAMANIZ LAZIM, NORMAL YUKARIDAN TEXT İLE ÖLME EKRANINDA Kİ TEXTLERİ TANIMLAYIN   
        }

        if (DenemeS.ölme_türkce == true)
        {
            // BURAYA GİRİLECEK TEXT LERİ SİZİN AYARLAMANIZ LAZIM, NORMAL YUKARIDAN TEXT İLE ÖLME EKRANINDA Kİ TEXTLERİ TANIMLAYIN
        }

    }

}

Paylaştığım kodları direk siz başta belirtiğim script adına göre Ctrl+c - Ctrl+V yaparak işlemi halledin. Siz eski kodunuzun içinde ki bütün her şeyi silin ve direk yapıştırın yani.

Sorun çıkarsa mümkün ise Ekran görüntüsü dahilinde + devrik cümle kurmadan açıklarsanız sevinirim :)
Public Text ingilizce_yazi/türkce_yazi1-2-3-4 diye yeni değişkenler tanıtın. Onları da if lerin içine ekleyin

Hangi koda tanıtayım. Aslında bir örnek gösterirseniz çok iyi olur.(Benim attığım kodların üzerinden anlatırsanız harika olur) Hala Unity'nin mantığını %100 kavrayamadım.
 
DİL.CS İÇİN >

Kod:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class dil : MonoBehaviour
{

    public int Menüdeger = 0;
    public int Durdurmadeger = 0;
    public int Olmedeger = 0;

    public bool ingilizce;
    public bool türkce;

    public bool durduma_ingilizce;
    public bool durdurma_türkce;

    public bool ölme_ingilizce;
    public bool ölme_türkce;


 
    void Start()
    {
        //Oyunu, oyun motorunu(unity i yani) kapatsanız dâhi yaptığınız, seçtiğiniz son değişiklikleri kaydeden kod aşağıdadır.
        Menüdeger = PlayerPrefs.GetInt("Mdeger");
        Durdurmadeger = PlayerPrefs.GetInt("Ddeger");
        Olmedeger = PlayerPrefs.GetInt("Odeger");
    }
    void Update()
    {
        if (Menüdeger == 1)
        {
          
            ingilizce = true;
            türkce = false;
        }
        if (Menüdeger == 2)
        {
      
            türkce = true;
            ingilizce = false;
        }


        if (Durdurmadeger == 1)
        {
      
            durduma_ingilizce = true;
            durdurma_türkce = false;
        }
        if (Durdurmadeger == 2)
        {
            
            durdurma_türkce = true;
            durduma_ingilizce = false;
        }


        if (Olmedeger == 1)
        {
            
            ölme_ingilizce = true;
            ölme_türkce = false;
        }
        if (Olmedeger == 2)
        {
        
            ölme_türkce = true;
            ölme_ingilizce = false;
        }
      
    }

    public void IngilizceButton()
    {
        Menüdeger = 1;
        PlayerPrefs.SetInt("Mdeger", Menüdeger);
    }
    public void TurkceButton()
    {
        Menüdeger = 2;
        PlayerPrefs.SetInt("Mdeger", Menüdeger);
    }

    //Durdurma sahnesi için bu aşağı da ki komutu, stop/durdurma tuşuna tanımlayın aynı yukarı da menü ye yaptığınız gibi.
    public void DurdurmaIngilizceButton()
    {
        Durdurmadeger = 1;
        PlayerPrefs.SetInt("Ddeger", Durdurmadeger);
    }
    public void DurdurmaTurkceButton()
    {
        Durdurmadeger = 2;
        PlayerPrefs.SetInt("Ddeger", Durdurmadeger);
    }


    //Ölme sahnesi için bu aşağı da ki komutu, ölme/yeniden doğma sanhesi tuşuna tanımlayın aynı yukarı da menü ye yaptığınız gibi.
    public void OlmeIngilizceButton()
    {
        Olmedeger = 1;
        PlayerPrefs.SetInt("Odeger", Olmedeger);
    }
    public void OlmeTurkceButton()
    {
        Olmedeger = 2;
        PlayerPrefs.SetInt("Odeger", Olmedeger);
    }


}

dilAktif.cs İÇİN >
Kod:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class dilAktif : MonoBehaviour {

    dil DenemeS;

    public GameObject DenemeCsObj;

    //Ana menü için
    public Text bolumSecText;
    public Text hikayeModText;
    public Text ozellistirmeText;
    public Text nasilOynanirText;
    public Text cıkText;

    public Text nasilText1;
    public Text nasilKontrollerText;
    public Text nasilDusmanlarTExt;

    void Start()
    {

        DenemeS = DenemeCsObj.GetComponent<dil>();

    }

    void Update()
    {
        if (DenemeS.ingilizce == true)
        {
            //Menü için
            bolumSecText.text = "Level Select";
            ozellistirmeText.text = "Customize (Coming Very Soon)";
            hikayeModText.text = "Story Mode (Coming Very Soon)";
            nasilOynanirText.text = "How To Play";
            cıkText.text = "Quit";
            //Nasıl için
            nasilText1.text = "How to play? You are welcome to play a game that adds a dimension to maze games. In this game, there are chapters in many places from the biggest cities to the Moon, from the Moon to the depths of the ocean.In these chapters, your aim is to hit the obstacles. How will you do that? Then lets come check it out.";
            nasilKontrollerText.text = "Controls; To control your character, you need to use the analog bar on the bottom left and the jump button on the bottom right.";
        }

        if (DenemeS.türkce == true)
        {
            //Menü için
            bolumSecText.text = "Bölüm Seç";
            ozellistirmeText.text = "Özelleştirme (Çok Yakında)";
            hikayeModText.text = "Hikaye Modu (Çok Yakında)";
            nasilOynanirText.text = "Nasıl Oynanır";
            cıkText.text = "Çık";
            //Nasıl için
            nasilText1.text = "Nasıl Oynanır? Labirent oyunlarına ayrı bir boyut katan oyunumuza hoşgeldiniz. Bu oyunda, en büyük şehirlerden, Aya, Aydan okyanusların derinliklerine kadar bir çok yerde geçen bölümler bulunmakta. Bu bölümlerde amacınız engellere çarpmayıp çıkışa ulaşmak.Bunu nasıl mı yapacaksınız? O zaman gelelim kontrollere.";
            nasilKontrollerText.text = "Kontroller; Karakterinizi kontrol etmek için sol alt taraftaki analog çubuğu ve sağ alt taraftaki zıplama butonunu kullanmanız gerekmekte.";
        }

        //DURDURMA EKRANI İÇİN AYARLAR-------------------------------------------------------
        if (DenemeS.durduma_ingilizce == true)
        {
         // BURAYA GİRİLECEK TEXT LERİ SİZİN AYARLAMANIZ LAZIM, NORMAL YUKARIDAN TEXT İLE DURDURMA EKRANINDA Kİ TEXTLERİ TANIMLAYIN   
        }

        if (DenemeS.durdurma_türkce == true)
        {
          // BURAYA GİRİLECEK TEXT LERİ SİZİN AYARLAMANIZ LAZIM, NORMAL YUKARIDAN TEXT İLE DURDURMA EKRANINDA Kİ TEXTLERİ TANIMLAYIN
        }


        //ÖLME/DEATH/YENİDEN BAŞLAMA EKRANI İÇİN AYARLAR-------------------------------------------------------
        if (DenemeS.ölme_ingilizce == true)
        {
            // BURAYA GİRİLECEK TEXT LERİ SİZİN AYARLAMANIZ LAZIM, NORMAL YUKARIDAN TEXT İLE ÖLME EKRANINDA Kİ TEXTLERİ TANIMLAYIN   
        }

        if (DenemeS.ölme_türkce == true)
        {
            // BURAYA GİRİLECEK TEXT LERİ SİZİN AYARLAMANIZ LAZIM, NORMAL YUKARIDAN TEXT İLE ÖLME EKRANINDA Kİ TEXTLERİ TANIMLAYIN
        }

    }

}

Paylaştığım kodları direk siz başta belirtiğim script adına göre Ctrl+c - Ctrl+V yaparak işlemi halledin. Siz eski kodunuzun içinde ki bütün her şeyi silin ve direk yapıştırın yani.

Sorun çıkarsa mümkün ise Ekran görüntüsü dahilinde + devrik cümle kurmadan açıklarsanız sevinirim :)
 
Çözüm
Teşekkürler. Sonucu paylaşacağım. Fakat ben devrik cümle mi kurmuşum? Fark etmemişim üzgünüm :)
dvm.PNG


Devam Text oluşturdum.

resum.PNG


İngilizcesini, Türkçesini yazdım.

jfasdjf.PNG


Kendi yazdığım durdurma panelini açmak için olan kod ile birlikte, dil ve dilAktif kodlarını boş objeye attım. Text'i atadım.

jfdasljf.PNG


Daha sonra durdurma butonuna hem kendi kodumu, hem de yeni kodu atadım.

Fakat, oyun İngilizce olsa bile "Devam" yazısı İngilizce olmuyor. Ayrıca her sahneye ayrı bir durdurma paneli oluşturdum. Tek bir tane Prefab oluşturup onu mu kullanmalıyım?

Sizi sıkmak istemiyorum ama cidden kafam çok karışıyor. Bu güne kadar ufak ufak kodlar ile oyunun büyük bölümünü bitirdim. Ama işler bir tık zorlaşınca çok kafam karıştı. Anlayışınız için teşekkürler.
Eyvah! Sanırım yine bildirim gelmeyecek size @Predator Titan :(
 
Son düzenleme:
Bildirim gelmedi, ama ben geldim.
Buton a eklediğiniz kendi kodunuzu silin, size verdiğim en son ki en güncel kod ile devam edin. Aynı anda iki kod kafa karıştıracaktır/hata verecektir.

Kod:
 //DURDURMA EKRANI İÇİN AYARLAR-------------------------------------------------------
        if (DenemeS.durduma_ingilizce == true)
        {
         Debug.Log("Dil Ayarları ingilizce");
        }

        if (DenemeS.durdurma_türkce == true)
        {
          Debug.Log("Dil Ayarları türkce);   
        }
haline çevirin ve denemeye başlayın. Ben size yine de ne yapmanız gerekiyor onu yazayım.

-Bir obje yaratın, içerisine dil.cs ve dilAktif.cs kodlarını atın.

-İki tane buton yaratın, onclick ayarlarını ayarlayın ve birisine turkce diğerine ise ingilizce kod satırlarını eşleştirin onclick üzerinden.

-Text objesi yaratın.

-dil.cs koduna bu Text objesini sürükleyin.
Eğer bunları zaten eksiksiz yaptıysanız sorun yok demektir, biz kodlara bakalım.

Dediğim kodu aynı şekilde güncelleyin ve deneyin.
 
Bunları yapacağım. Peki durdurma kanvasını etkinleştirmek için aşağıdaki kendi yazdığım koddan "DurdurAcmak" bölümünü dilAktif.Cs'deki "if"sorgusuna mı taşımalıyım o zaman?
kodeeee.PNG
 
Bunlar kalsın, silmeyin. Yukarı da silin demiştim lakin siz silmeyin. Bunları ben başka şey sandım. Siz sadece dediğim şeyi deneyin. Unity nin aşağısında ki Console kısmından çıktıları kontrol edeceksiniz unutmayın.
 
btn.PNG


2 Buton oluşturdum.

jfdasljf.PNG

ing.PNG




Gereken objeleri atadım.

asdlfjasdf.PNG


Aynı şekilde, gereken objeleri gereken yerlere atadım.

Kodu güncelledim, konsolda bir değişiklik olmadı. Sadece dilAktif.Cs'ye bütün textleri atamadığım için uyarıyordu. Kodu eski haline getirdim yine olmadı.

Ancak;

ashfkhsafas.PNG

dil.Cs olması gerektiği gibi çalışıyor. Aslında dilAktif.Cs de çalışıyor. Fakat sadece menüde.

(Tek bir tuş oluşturup denedim, olmadı. Tuşları üst üste yerleştirdim, yine olmadı)
 
Dostum bak şimdi, oyununu başlat. Başlattıktan sonra bana şunların cevabını ver.
1-Oyunun kaç sahneden oluşuyor.
2-Kodlar sadece menü panelinde mi ise yarıyor? Eğer öyle ise oyunu başlat ve bana menü paneli açık iken Kodlar objesinin sağ tarafında yazan özellikler kısmının SS ni alıp at.
3-Dil aktif ve dil kodlarında yazan şeylerde hata veren satir var mi ?
4-Yukarıda ki ss de text objelerinin içerisini boş bırakmışsın, onları textler yaratıp doldur, boş bırakma.

BUTUN BUNLARA SIRASI İLE CEVAP VEREBİLİRSEN İYİ OLUR DOSTUM!
Ancak;

Eki Görüntüle 323826
dil.Cs olması gerektiği gibi çalışıyor. Aslında dilAktif.Cs de çalışıyor. Fakat sadece menüde.

(Tek bir tuş oluşturup denedim, olmadı. Tuşları üst üste yerleştirdim, yine olmadı)

Hocam bu resim de görüldüğü üzere Menü paneli de ise yarıyor, durdurma paneli de , ölme paneli de .

Bakin bir tane Scene yaratın bu giriş sahnesi yani scene i olsun sonra bir tane daha scene yaratın bu ise ana oyun sahnesi olsun. Yani 1.sahne de , play quit settings butonları olsun bunlarla diğer sahneler yüklesin oyundan çıkarılsın ya da ayarlar paneli açılsın.

Play tuşuna bastığın zaman sahne 2 yüklesin settings e basınca da ayarlar paneli açılsın ve dil ayarlarini sorsun. Burada kod da biraz değişiklik yapalım.
Siz mümkün ise [email protected](Sayın yetkililer, arkadaşin proje dosyasını ulu orta yerde paylaşıp çalınma riskini ele alıp direk olarak bana göndermesi ve irtibat sağlaması daha makul olacaktır, herhangi bir sohbet mail üzerinden gerceklesmeyecek sadece dosya transferi amacı ile yonlendirilecektir bu yuzden ceza almak ya da mesaj silinmesi yaşansın istemem, teşekkürler)email ime oyunun dosyasını google drive a yükleyip bağlantısını paylaşın, gönderin. Ben eksiklikleri tamamlayıp size geri dönüş yapacagim.
 
Son düzenleme:
Uyarı! Bu konu 6 yıl önce açıldı.
Muhtemelen daha fazla tartışma gerekli değildir ki bu durumda yeni bir konu başlatmayı öneririz. Eğer yine de cevabınızın gerekli olduğunu düşünüyorsanız buna rağmen cevap verebilirsiniz.

Yeni mesajlar

Geri
Yukarı