Hey merhaba ziyaretçi bize destek olmak ister misin ? Hemen Kayıt Ol Seni hiç sıkmadan kayıt edeceğiz endişelenmek bize destek olduğun için teşekkürler.



  • Toplam: 0 Oy - Ortalama: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Save Load Sistemi
#1
Arkadaşlar Merhaba unity'de bir oyun yapıyorum ve hali hazırda bitecek sayılır fakat bir sorunum var oyun android üzerinde ve oyuncu leveleri aştıkça levelerin kilitleri açılıyor fakat oyuncu oyundan çıktıktan sonra save edemiyorum çünkü Türkçe kaynak bulamadım ama biraz mantığını kavradım gibi aklımda şöyle bir çözüm mantığı var bir int değeri olucak ve oyuncu leveleri geçtiği zaman int değeri her seferinde +1 yükselicek yani int değeri kaçsa o level butonun aktifliği true olucak sizce bu int değerini nasıl kaydedebilirim konu hakkında bilgisi olanlar yardımcı olabilirmi ?
  Cevapla
#2
Playerprefs sınıfındaki Int() veya Float() gibi metodları kullanarak basitçe veri saklayabilirsin.Oyun kapansa ve sonra tekrar açılsa bu veriler saklanıp tekrar ulaşılabilir oluyor.Bu küçük bazlı oyunlar için ideal olabilir ancak büyük kapsamlı oyunlarda farklı şekillerde Saving-Loading yapılıyor.Buna serilize etmek(serialization ) denilmektedir.Eskiden oyunlarda XML dosyaları serilize edilirdi.Oyundaki objeler ve rotasyonları , posiyonları gibi bilgiler ve sair bilgiler bu sayede saklanıp (Saving) tekrar deserilize (deserialization) edilerek kullanılırdı buna Loading diyoruz.Bunu XML dosyaları veya JSon veya diğer pek çok farklı uzantıda kolayca serilize edilebilecek dosya türlerini kullanarak yapabilirsin .Örnek için Linkleri görüntüleyebilmek için Kayıt ol manız veya Giriş yapmanız gerekiyor.Anlayışınız için teşekkürler.!
|| Az olan çoğun ispatıdır ||
  Cevapla
#3
Böyle bir sistem için aslında PlayerPrefs işini görür. Fazla komplike bir durum yok. Diyelim ki elinde level diye bir int değişken var. Zaten senin kafanda mantık oturmuş gibi. Bunu PlayerPrefs.SetInt("level", level") kodu ile hafızaya alabilirsin. Sen her girip çıktığında bu değişkende ki değer neyse öyle kalmaya devam eder. Hafıza almakla bitmiyor tabi. Hafızaya aldığın bu değişkeni PlayerPrefs.GetInt("level") kodu ile çağırman lazım. Kısaca şöyle göstereyim.

void Update()
{
     PlayerPrefs.SetInt("level", level); // burada level değişkenini hafızaya aldık. Update içerisinde aldık ki herhangi bir değişiklikte yine kayda almaya devam etsin.
}

void SahneTamamlandi()
{
     level++;
}

void SahneAc()
{
     if(PlayerPrefs.GetInt("level") >= 5)
     {
            // sahne açmak için gereken kodlar
     }
}

Sen bunu kendi sistemini nasıl uygularsın bilmem ben bir örnekle PlayerPrefs'in kullanımını göstermek istedim.
İnanmak ve sabretmek, sonrasında geliyor, yani deniyorum...
  Cevapla
#4
(10-05-2018, Saat: 21:48)menesekinci Nickli Kullanıcıdan Alıntı: Linkleri görüntüleyebilmek için Kayıt ol manız veya Giriş yapmanız gerekiyor.Anlayışınız için teşekkürler.!Böyle bir sistem için aslında PlayerPrefs işini görür. Fazla komplike bir durum yok. Diyelim ki elinde level diye bir int değişken var. Zaten senin kafanda mantık oturmuş gibi. Bunu PlayerPrefs.SetInt("level", level") kodu ile hafızaya alabilirsin. Sen her girip çıktığında bu değişkende ki değer neyse öyle kalmaya devam eder. Hafıza almakla bitmiyor tabi. Hafızaya aldığın bu değişkeni PlayerPrefs.GetInt("level") kodu ile çağırman lazım. Kısaca şöyle göstereyim.

void Update()
{
     PlayerPrefs.SetInt("level", level); // burada level değişkenini hafızaya aldık. Update içerisinde aldık ki herhangi bir değişiklikte yine kayda almaya devam etsin.
}

void SahneTamamlandi()
{
     level++;
}

void SahneAc()
{
     if(PlayerPrefs.GetInt("level") >= 5)
     {
            // sahne açmak için gereken kodlar
     }
}

Sen bunu kendi sistemini nasıl uygularsın bilmem ben bir örnekle PlayerPrefs'in kullanımını göstermek istedim.
 
Cidden ne demek istedigimi kodlarla telaffuz etmisin yalniz bunlari uyguladim int degiskeni artırıp kaydediyorum butonla uygulamadan cikip tekrar girdigimde kaydediyor ama 2 dk sonra tekrar girdigim zaman 0 olarak gozukuyor
  Cevapla
#5
(10-05-2018, Saat: 22:58)Bedirhan Nickli Kullanıcıdan Alıntı: Linkleri görüntüleyebilmek için Kayıt ol manız veya Giriş yapmanız gerekiyor.Anlayışınız için teşekkürler.!
(10-05-2018, Saat: 21:48)menesekinci Nickli Kullanıcıdan Alıntı: Linkleri görüntüleyebilmek için Kayıt ol manız veya Giriş yapmanız gerekiyor.Anlayışınız için teşekkürler.!Böyle bir sistem için aslında PlayerPrefs işini görür. Fazla komplike bir durum yok. Diyelim ki elinde level diye bir int değişken var. Zaten senin kafanda mantık oturmuş gibi. Bunu PlayerPrefs.SetInt("level", level") kodu ile hafızaya alabilirsin. Sen her girip çıktığında bu değişkende ki değer neyse öyle kalmaya devam eder. Hafıza almakla bitmiyor tabi. Hafızaya aldığın bu değişkeni PlayerPrefs.GetInt("level") kodu ile çağırman lazım. Kısaca şöyle göstereyim.

void Update()
{
     PlayerPrefs.SetInt("level", level); // burada level değişkenini hafızaya aldık. Update içerisinde aldık ki herhangi bir değişiklikte yine kayda almaya devam etsin.
}

void SahneTamamlandi()
{
     level++;
}

void SahneAc()
{
     if(PlayerPrefs.GetInt("level") >= 5)
     {
            // sahne açmak için gereken kodlar
     }
}

Sen bunu kendi sistemini nasıl uygularsın bilmem ben bir örnekle PlayerPrefs'in kullanımını göstermek istedim.
 
Cidden ne demek istedigimi kodlarla telaffuz etmisin yalniz bunlari uyguladim int degiskeni artırıp kaydediyorum butonla uygulamadan cikip tekrar girdigimde kaydediyor ama 2 dk sonra tekrar girdigim zaman 0 olarak gozukuyor

Bunun sebebi level değişkenini arttırmanı sağlayan işlemin girip çıktığında tekrar sıfırlanmasından kaynaklı. Oda hali ile her zaman son hali alıyor hafızaya. Static yap değişkeni. static int level gibi kullanmayı dene birde. Olmadı özele gel, eğer buradan gerçekten bilgili biri bu konuda yardım etmemişse o zamana kadar sana yardım etmeye çalışayım. Bende yeni sayılırım, deneme yanılma ile çözeriz sorunu.
İnanmak ve sabretmek, sonrasında geliyor, yani deniyorum...
  Cevapla
#6
(10-05-2018, Saat: 23:59)menesekinci Nickli Kullanıcıdan Alıntı: Linkleri görüntüleyebilmek için Kayıt ol manız veya Giriş yapmanız gerekiyor.Anlayışınız için teşekkürler.!
(10-05-2018, Saat: 22:58)Bedirhan Nickli Kullanıcıdan Alıntı: Linkleri görüntüleyebilmek için Kayıt ol manız veya Giriş yapmanız gerekiyor.Anlayışınız için teşekkürler.! 
Cidden ne demek istedigimi kodlarla telaffuz etmisin yalniz bunlari uyguladim int degiskeni artırıp kaydediyorum butonla uygulamadan cikip tekrar girdigimde kaydediyor ama 2 dk sonra tekrar girdigim zaman 0 olarak gozukuyor

Bunun sebebi level değişkenini arttırmanı sağlayan işlemin girip çıktığında tekrar sıfırlanmasından kaynaklı. Oda hali ile her zaman son hali alıyor hafızaya. Static yap değişkeni. static int level gibi kullanmayı dene birde. Olmadı özele gel, eğer buradan gerçekten bilgili biri bu konuda yardım etmemişse o zamana kadar sana yardım etmeye çalışayım. Bende yeni sayılırım, deneme yanılma ile çözeriz sorunu.

Yo aslında şöyle birşey farkettim uygulamadan çıktıktan sonra ilk girişte değeri düzgün bir şekilde veriyor fakat ikinci girişte sıfır veriyor herhangi bir değişiklik yapmazsan

(10-05-2018, Saat: 23:59)menesekinci Nickli Kullanıcıdan Alıntı: Linkleri görüntüleyebilmek için Kayıt ol manız veya Giriş yapmanız gerekiyor.Anlayışınız için teşekkürler.!
(10-05-2018, Saat: 22:58)Bedirhan Nickli Kullanıcıdan Alıntı: Linkleri görüntüleyebilmek için Kayıt ol manız veya Giriş yapmanız gerekiyor.Anlayışınız için teşekkürler.! 
Cidden ne demek istedigimi kodlarla telaffuz etmisin yalniz bunlari uyguladim int degiskeni artırıp kaydediyorum butonla uygulamadan cikip tekrar girdigimde kaydediyor ama 2 dk sonra tekrar girdigim zaman 0 olarak gozukuyor

Bunun sebebi level değişkenini arttırmanı sağlayan işlemin girip çıktığında tekrar sıfırlanmasından kaynaklı. Oda hali ile her zaman son hali alıyor hafızaya. Static yap değişkeni. static int level gibi kullanmayı dene birde. Olmadı özele gel, eğer buradan gerçekten bilgili biri bu konuda yardım etmemişse o zamana kadar sana yardım etmeye çalışayım. Bende yeni sayılırım, deneme yanılma ile çözeriz sorunu.

aha valla mükemmel bişi yaptım Big Grin aldım getintleri int score = PlayerPrefs.GetInt("LevelScore"); her türlü çalışıo Big Grin saolasın
  Cevapla
#7
(11-05-2018, Saat: 00:11)Bedirhan Nickli Kullanıcıdan Alıntı: Linkleri görüntüleyebilmek için Kayıt ol manız veya Giriş yapmanız gerekiyor.Anlayışınız için teşekkürler.!
(10-05-2018, Saat: 23:59)menesekinci Nickli Kullanıcıdan Alıntı: Linkleri görüntüleyebilmek için Kayıt ol manız veya Giriş yapmanız gerekiyor.Anlayışınız için teşekkürler.!Bunun sebebi level değişkenini arttırmanı sağlayan işlemin girip çıktığında tekrar sıfırlanmasından kaynaklı. Oda hali ile her zaman son hali alıyor hafızaya. Static yap değişkeni. static int level gibi kullanmayı dene birde. Olmadı özele gel, eğer buradan gerçekten bilgili biri bu konuda yardım etmemişse o zamana kadar sana yardım etmeye çalışayım. Bende yeni sayılırım, deneme yanılma ile çözeriz sorunu.

Yo aslında şöyle birşey farkettim uygulamadan çıktıktan sonra ilk girişte değeri düzgün bir şekilde veriyor fakat ikinci girişte sıfır veriyor herhangi bir değişiklik yapmazsan

Şöyle bir şey yapalım o zaman. Madem o veri sürekli değişiyor, bir değişken üzerinden değil de kendimiz PlayerPrefs'e veriyi kendimiz aktaralım. Kısaca demek istediğim.

void OyunSonu()
{
     PlayerPrefs.SetInt("level", 2);
}

if(PlayerPrefs.GetInt("level") == 2)
{
     // yeni sahneyi aç
}

Önceden level değişkenini bir arttırıyorduk. Sen bu şekilde onu bir bir arttırmak yerine, PlayerPrefs'e aktardığımız veriyi manuel değiştirirsen, if ile kontrol ettiğinde de sahne açarsın. Birde böyle dene derim. Az önce bir video izledim adam böyle yapıyordu.

NOT: İşine yaradıysa ne mutlu bana son düzeltmeni görmemişim.
İnanmak ve sabretmek, sonrasında geliyor, yani deniyorum...
  Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
Video Unity Ders - Level Kilit Sistemi Scofailed 0 89 20-05-2019, Saat: 20:42
Son Yorum: Scofailed
Video Unity - Günlük Bonus Sistemi Scofailed 2 164 15-05-2019, Saat: 15:06
Son Yorum: Scofailed
  Unity pool(havuz) sistemi trnkttc 1 779 14-09-2017, Saat: 18:49
Son Yorum: TheTudors

Hızlı Menü:


Konuyu Okuyanlar: 1 Ziyaretçi