Cohorts
  • Discover
  • About Us
  • Blog
  • Patika.dev
  • Web3

Unity Junior Programmer

Unity'ye Giriş
Unity'yi İndir

Ünite 1-Giriş
3D Motorlarınızı çalıştırın
Ders Klasörü ve Yeni Proje Oluşturun
Assetleri içe aktarın ve Prototip 1'i açın
Aracınızı sahneye ekleyin
Bir engel ekleyin ve yeniden konumlandırın
Kameranızı bulun ve oyunu çalıştırın
Kamerayı aracın arkasına taşıyın
Arayüz düzenini özelleştirin
Ders Özeti

Giriş
İlk komut dosyanızı oluşturun ve uygulayın
Güncelleme yöntemine bir yorum ekleyin
Araca ileri bir hareket verin
İlerlemek için bir Vector3 kullanın
Aracın hızını özelleştirin
Nesnelere RigidBody bileşenleri ekleyin
Engelleri çoğaltın ve konumlandırın
Ders Özeti

Giriş
Aracınız için bir hız değişkeni ekleyin
Kamera için yeni bir script oluşturun
Kamera konumuna bir ofset ekleyin
Ofseti bir Vector3 değişkenine dönüştürün
LateUpdate ile Kamerayı Pürüzsüzleştirin
playmod’un renk tonunu düzenleyin
Ders Özeti

Sürücü Koltuğuna Geçin
Aracın sola/sağa hareket etmesine izin verin
Girdilerde temel sol/sağ hareketi
Araç hızının kontrolünü elinize alın
Aracı kaydırmak yerine döndürmek
Kodunuzu ve hiyerarşinizi temizleyin
Ders Özeti

Challenge 1 - Düzlem Programlama

Bonus Özellikler 1 - Çalışmanızı Paylaşın
Kolay: Engel piramitleri
Orta: Karşıdan gelen araçlar
Zor: Kamera değiştirici
Uzman: Yerel çok oyunculu

Project Design Document
Understand what a Personal Project
Review Design Doc examples
Complete your Project Concept V1
Complete your Project Timeline
Complete your MVP sketch
Ders Özeti

Üretim aşamalarını özetleyin
Başlık
Tasarım belgeleri ve proje planları
Projeleri yönetmek ve ilerlemeyi izlemek
Proje yönetiminizi ve izlemenizi destekleyecek araçları belirleyin
Yayınlamaya hazırlanıyor
Projenizi yayınlamak

Oyuncu Konumlandırma
Ünite 2 - Giriş
Prototip 2 için yeni bir Proje oluşturun
Oyuncuyu, Hayvanları ve Yiyecekleri Ekleyin
Kullanıcının yatay girişini alın
Oyuncuyu soldan sağa hareket ettirin
Oyuncuyu sahada tut
Kodunuzu ve değişkenlerinizi temizleyin
Ders Özeti

Yiyecek Uçuşu
Merminin ileriye doğru uçmasını sağlayın
Mermiyi hazır bir yapı haline getirin
Boşluk çubuğuna basmayı test edin
Boşluk çubuğuna basarak mermiyi başlatın
Hayvanları prefabrike yapın
Mermileri ekran dışında yok edin
Ekran dışındaki hayvanları yok edin
Ders Özeti

Rastgele Hayvan Kaçışması
Bir spawn (yumurtlama) yöneticisi oluşturun
S'ye basıldığında bir hayvan doğurun
Diziden rastgele hayvanlar üretin
Doğma yerini rastgele belirleyin
Kamera perspektifini (açısını) değiştirin(değiştirmek)
Ders Özeti

Çarpışma Kararları
Hayvanları yumurtlatmak için yeni bir yöntem yapın
Hayvanları belirli aralıklarla yumurtlatın
Çarpıştırıcı ekleyin ve bileşenleri tetikleyin
Çarpışma anında nesneleri yok edin
Bir "Oyun Bitti" mesajını tetikleyin
Ders Özeti

Challenge 2 - Fetch Oyunu
Daha Fazla Challenge

Bonus Features 2 Genel Bakış
Kolay: Dikey oyuncu hareketi
Orta: Agresif hayvanlar
Zor: Oyun kullanıcı arayüzü
Uzman: Hayvan açlığı çubuğu
İpuçları ve çözüm önerileri

Primitive’lerle Yeni Proje
Yeni bir Proje oluşturun ve sahnenizi yeniden adlandırın
Bir arkaplan düzlemi oluşturun
Yeni bir malzeme ile primitive bir Oyuncu oluşturun
Proje türüne göre kamerayı konumlandırın
Düşmanlar, engeller, atılan cisimler ve malzemeler
nity Package yedekleme dosyasını dışa aktarın
Ders Özeti

Lab 3 Oyuncu Kontrolü
1 PlayerController oluşturun ve kodunuzu planlayın
Kullanıcı girdisinden temel hareket
Oyuncunun hareketini sınırlayın
Kod Temizleme ve Yedeklemeyi Dışa Aktarma
Ders Özeti

Ses ve Efektler Giriş
Zıplama Kuvveti Giriş
Prototipi aç ve arka planı değiştir
Bir oyuncu karakteri seçin ve ayarlayın
Oyuncunun başlangıçta zıplamasını sağlayın
Boşluk çubuğuna basıldığında oyuncunun zıplamasını sağlayın
Atlama kuvvetini ve yerçekimini değiştirin
Oyuncunun çift zıplamasını engelle
Bir engel yapın ve sola hareket ettirin
Bir Spawn Manager oluşturun
Aralıklarla engeller ortaya çıkarın
Ders Özeti

Dünyayı Hızlandırın
Arka planı tekrarlamak için bir komut dosyası oluşturun
Arka planın konumunu sıfırlayın
Collider ile arka plan tekrarını düzeltin
Trigger üzerinden yeni bir oyun ekleyin
gameOver'da MoveLeft'i durdurun
gameOver'da engellerin oluşmasını durdurun
Sınırlardan çıkan engelleri yok edin
Ders Özeti

Orada Öylece Durma
Oyuncunun animasyonlarını keşfedin
Oyuncunun başlangıçta koşmasını sağlayın
Bir atlama animasyonu ayarlayın
Atlama animasyonunu ayarlayın
Düşme animasyonunu ayarlayın
Oyuncunun baygın iken zıplamasını engelleyin
Ders Özeti

Parçacıklar ve Ses Efektleri
Bir patlama parçacığını özelleştirin
Parçacığı çarpışmada oynatın
Kir sıçratma parçacığı ekleyin
Kamera nesnesine müzik ekleyin
Ses Klipleri için değişkenleri bildirin
Zıplayınca Ve Çarpınca Ses Klibi Çalma
Ders Özeti

Genel Bakış
Uyarı

Bonus Özellikler 3 Genel Bakış
Kolay: Engelleri rastgele düzenleyin
Orta: Çift atlama
Zor: Atılma yeteneği ve puanı
Uzman: Oyun başlatma animasyonu
İpuçları ve çözüm yolu

Game Play Griş
Nereye Gittiğinizi İzleyin - Giriş
Proje oluştur ve sahneyi aç
Oynatıcıyı kurun ve bir doku ekleyin
Kamera için bir odak noktası oluşturun
Kullanıcı girişi ile odak noktasını döndürün
Oyuncuya ileri kuvvet ekleyin
Odak noktası yönünde hareket et
Ders Özeti

Oyuncuyu Takip Etmek Giriş
Bir Düşman ve Bir Fizik Materyali Ekleme
Oyuncuyu Takip Etmek İçin Düşman Komut Dosyası Oluşturma
Bir lookDirection Değişkeni Oluşturma
Düşman İçin Bir Doğma Yöneticisi (Spawn Manager) Oluşturma
Rastgele Doğma Noktası Oluşturma
return methodunu Bir Doğma Noktası Yapma
Ders Özeti

PowerUp ve CountDown
Bir PowerUp seçin ve hazırlayın
Çarpışmada PowerUp’ı yok edin
Düşmanı ve PowerUp’ı test edin
PowerUp ile ekstra geri tepme uygulayın
PowerUp için CountDown Rutini Oluşturunp
Bir güç açma göstergesi ekleyin
Ders Özeti

Düşman Dalgaları İçin For-Döngüleri
3 düşman oluşturmak için bir for döngüsü yazın
For-döngüsüne bir parametre verin
Düşmanlar eğer düşerlerse onları yok edin
Düşman sayısını (enemyCount) dalgalarla artırın
Yeni dalgalarla birlikte Powerups oluşturun
Ders Özeti

Genel Bakış
Uyarı

Bonus Özellikler 4 Genel Bakış
Kolay: Daha zorlu düşman
Orta: Güdümlü roketler
Zor: Sert saldır
Uzman: Boss savaşı

Temel Oynanış
Objelere temel hareket ver
Objeleri ekran dışında yok et
Obje çarpışmalarını işle
Objeleri prefab’lara dönüştür
SpawnManager'ın Prefabs oluşturmasını sağla
Ders Özeti

Kullanıcı Arayüzü Giriş
Tıklayıcı Fare - Giriş
Proje oluşturun ve 2B görünüme geçin
Good (İyi) ve Bad (Kötü) hedefleri oluşturun
Nesneleri rastgele havaya fırlatın
Dağınık kodu yeni metodlarla değiştirin
Game Manager içerisinde obje listesi oluşturun
Objelerin ortaya çıkması için bir coroutine oluşturun
Tıklama ve sensör yoluyla hedefleri yok edin
Ders Özeti

Skor Tutmak
Skor metni ekle ekranda konumlandırın
Puan Metninin özelliklerini düzenleyin
Puan metnini ve değişkeni başlat
Yeni bir UpdateScore yöntemi oluşturun
Hedefler yok edildiğinde puan ekleyin
Her hedefe bir puan değeri atayın
Parçacık patlaması ekleyin
Ders Özeti

Game Over Giriş
Game Over metin nesnesi oluşturun
GameOver metninin görünmesini sağla
GameOver fonksiyonu oluştur
Stop spawning and score on GameOver
Yeniden Başlat butonunu ekle
Yeniden başlatma butonunun çalışmasını sağlayın
Oyun bittiğinde yeniden başlat butonunu göster
Ders Özeti

Zorluk Nedir?
Başlık Metni ve Menü Butonları Oluşturma
Zorluk Seviyesi İçin DifficultyButton Scripti Ekleme
Butona Tıklandığında SetDifficulty Metodunu Çağırma
Yeni Butonlarınız ile Oyunu Başlatma
StartGame’de Başlık Ekranını Devre Dışı Bırakma
Zorluğu Değiştirmek İçin Parametre Atama
Ders Özeti

Genel Bakış
Uyarı

Bonus Özellikler 5 Genel Bakış
Kolay: Lives UI
Orta: Müzik sesi
Zor: Pause menüsü
Uzman: Tıkla-ve-kaydır

Assets kitaplığını içe aktarın ve göz atın
Oynatıcıyı yeni assetsla değiştirin
Assets mağazasına göz atın
Oyuncu olmayan tüm temel öğeleri değiştirin
Arka plan dokusunu değiştirin
Replace the background texture
Ders Özeti

Kullanıcı geri bildirimine ve testine giriş

Proje Optimizasyonu - Giriş
Değişken özellikleri
Unity Event Fonksiyonları
Object Pooling
Ders Özeti

Make the vehicle use forces
Prevent car from flipping over
Add a speedometer display
Add an RPM display
Prevent driving in mid-air
Lesson Recap
Sharing your Projects

ECS Hayatta Kalma Rehberi

Kariyer araştırması ve hazırlık

Portfolyolara Giriş

Junior Programmer: Sahne akışını ve verilerini yönetin
Başlık
Sürüm kontrolünü ayarla
Örnek projeyi keşfedin
Nesne yönelimli programlamanın ilkeleri
Bir sahne akışı oluşturun
Sahneler arasında veri kalıcılığı uygulayın
Oturumlar arasında veri kalıcılığı uygulayın

Gönderim: Yeni bir depoda veri kalıcılığı
7.5 Veri kalıcılığını uygulayın

Nesne yönelimli programlamada soyutlama

Nesne yönelimli programlamada kalıtım ve polimorfizm

Nesne yönelimli programlamada kapsülleme

Sorunları belirlemek için profil kodu

Job preparation: Junior Programmer

Sunum: Programlama teorisi iş başında

Oturumlar Arasında Veri Kalıcılığı

Bu eğitimde, uygulamanın oturumları arasında kalıcı olması için kullanıcının seçtiği rengi kaydetmek ve yüklemek için kod yazacaksınız. Bu eğitimin sonunda şunları yapabileceksiniz:

  • Uygulamanın başlatılması sırasındaki uygun başlatma yöntemlerini çağırın
  • Listeler ve sözlükler gibi veri yapılarını uygulayarak verileri depolayın ve düzenleyin
  • Uygulamanın kapanma sırasında kullanıcı verilerini kaydedin

Adım 6.1 Genel Bakış

Şu anda, Unity Editör'de devam eden çalışmayı test ederken, depodaki forkliftler için seçtiğiniz renk, uygulamayı bir sonraki açışınız için kaydedilmeyecek. Bu uygulamanın bir derlemesini oluşturursanız, kullanıcı uygulamayı her çalıştırdığında bu birbirinden bağımsız bir deneyim olacaktır.

Kullanıcının uygulamayı başlattığında otomatik olarak seçilmesi için son seçilen rengi kaydetmesi yararlı olacaktır. Bu öğreticide, sahneler arasında ve oturumlar arasında veri kalıcılığı uygulamak için önceki çalışmanızı geliştireceksiniz.

Projenizde şöyle görünebilir:

İpucu: Bu eğitim ile önceki eğitim arasında bir ara verdiyseniz, devam etmeden önce veri kalıcılığına giriş bölümünü gözden geçirmeniz yararlı olabilir.

Adım 6.2 Özetinizi değerlendirin

Bu derste, kullanıcı tarafından seçilen rengi bir dosyaya yazacaksınız. Ardından, uygulama başladığında bu dosyanın var olup olmadığını kontrol etmek için MainManager'ı yapılandıracaksınız. Dosya varsa, MainManager dosyada saklanan rengi okuyacak ve renk seçiciyi o renge ayarlayacaktır.

Başlamadan önce, proje özetini gözden geçirmek için birkaç dakikanızı ayırın. Bu görevi kendi başınıza yapacağınızı hayal edin. Aşağıdaki soruların cevaplarını yazın:

  • Neyi uygulamanız gerekiyor ve bunu nerede uygulayacaksınız? Bizim yaklaşımımızla karşılaştırmak için şimdi düşüncelerinizi yazın.
  • Create with Code'da veya diğer öğrenme deneyimlerinde benzer işlevlerle daha önce nerede karşılaştınız? Kodlara erişemeseniz bile, aşina olduğunuz oturumlar arasındaki veri kalıcılığı örneklerini düşünün.
  • Unity Learn'ün ötesinde, bunu yapmanıza hangi kaynaklar yardımcı olabilir? Unity ekosistemindeki ve ötesindeki seçenekleri düşünün.

Bir göreve başlamadan önce zaten bildiklerinizi düşünmek için birkaç dakika ayırmak çok yararlı bir alıştırmadır, özellikle de bu görev size zor geliyorsa. Unity Essentials'ı tamamladıysanız, içerik oluşturucuların Unity'yi öğrenirkenki düşünce yapılarını keşfettiniz.

Elinizin altındaki araçları belirlemek ve önceki öğreniminizi gözden geçirmek, kısa bir toplantı için farklı yaklaşımlar üzerinde düşünmek için gerçekten yararlı fırsatlar sağlayabilir. Bu yolun çok ötesinde öğrenme yolculuğunuza devam ederken bu yaklaşımı benimseyebilirsiniz - bir şeyi yapmanın tek bir yolu olması nadirdir!

Adım 6.3 Veriler Oturumlar Arasında Nasıl Kalıcı Olabilir?

Verilerin oturumlar arasında kalıcı olması için bir şekilde saklanması gerekir. Sizin durumunuzda, kullanıcınızın seçtiği rengi, depolanabilecek bir biçime dönüştürmeniz ve ardından uygulamayı tekrar yüklediğinde okuyabilmeniz gerekir.

Karmaşık verileri saklanabilecekleri bir biçime dönüştürme işlemine serializasyon denir. Verilere tekrar erişmeye hazır olduğunuzda, onu geri dönüştürme işlemine deserializasyon denir.

figures

Açıklama: Akış diyagramı serileştirme sürecini gösterir: baytlara dönüştürülen ve ardından depolanan bir nesne; seri kaldırma işlemi bunu tersine gösterir.

Verilerin ne olduğuna ve onunla ne yapmak istediğinize bağlı olarak, verileri depolamak için kullanabileceğiniz farklı biçimler vardır. Bu durumda JSON formatını kullanacaksınız.

Adım 6.4 JSON Nedir?

JSON, verileri depolamak ve platformlar arasında değiş tokuş etmek için kullanılan bir metin biçimidir. İlk olarak web için geliştirilmiştir ve tam adı JavaScript Object Notation'dır. JavaScript'i temel alır, ancak dilden bağımsızdır - ister C# kodu yazıyor, ister başka bir programlama dili kullanıyor olun, onu kullanabilirsiniz.

JSON biçimi, verileri bir anahtar:değer çifti biçiminde depolar. Anahtar bir dizedir ve değer şöyle olabilir:

  • bir sayı
  • dizi
  • Bool (doğru/yanlış)
  • bir dizi değerler
  • Başka bir JSON nesnesi

Bu biçim nasıl çalışır?

Aşağıdaki JSON dizesi, bir kişi hakkında temel bilgileri depolayan bir nesneyi kodlar:

{
  "name": "John",
  "age": 27,
  "address": {
    "streetAddress": "21 2nd Street",
    "city": "New York"
  }
  "pet": [“dog”, “cat”]
}

Örneği inceleyelim:

  • Her nesne küme parantezleri ( { } ) ile çevrilidir.
  • Her giriş, virgülle ayrılmış bir anahtar:değer çifti biçimindedir.
  • "Evcil hayvan" girişi bir dizi stringtir— dizi değerleri köşeli parantezler ( [ ] ) arasında listelenir.
  • "Adres" girişiyle ilişkili değer de süslü parantezler arasındadır - bunun nedeni başka bir JSON nesnesi olmasıdır.

Adım 6.5 JSON Neden Özetiniz İçin Uygun?

JSON, çok farklı sistemler arasında veri alışverişi yapmak için geliştirildi, bu da onu uygulamanızda veri kaydetmeye uygun hale getiriyor. Unity, JsonUtility adlı bir yardımcı sınıfa sahiptir ve bu, serileştirilebilir bir sınıf almanıza ve onu JSON temsiline dönüştürmenize olanak tanır. Bunun verileri hem seri hale getirmek hem de seri durumdan çıkarmak için nasıl çalıştığını görelim.

Verileri Serialize Etme

Aşağıdaki PlayerData sınıfını göz önünde bulundurun:

[Serializable]
public class PlayerData
{
    public int level;
    public Vector3 position;
    public string playerName;
}

Bu sınıfı aşağıdaki değerlerle JsonUtility'ye geçirmek istediğinizi düşünün:

PlayerData myData = new PlayerData();
myData.level = 1;
myData.position = new Vector3(3.0f, 4.4f, 2.3f);
myData.playerName = "John";

json = JsonUtility.ToJson(myData); aşağıdaki JSON dizesiyle sonuçlanacaktır:

{
    “level”: 1,
    “position”: {
        “x” : 3.0,
        “y” : 4.4,
        “z” : 2.3 },
    “playerName”: “John”
}

Konum bir vektör 3 olduğundan, üç anahtarla yeni bir JSON nesnesi olarak kodlandığını unutmayın: x, y ve z. Bunun nedeni, Vector3 sınıfının (son derece basitleştirilmiş):

[Serializable]
public class Vector3
{
    public float x;
    public float y;
    public float z;
}

Verilerin Deserialize Edilmesi

JsonUtility'nin ayrıca az önce gördüğünüz işlemin tersini yapan bir yöntemi vardır: FromJson<T>.

Bu yöntem, bazı JSON verilerini içeren bir dize alır ve alanları doldurulmuş olarak nesnenin bir örneğini oluşturur. Bir şablon argümanı kullanır — PlayerData JSON dizesini incelerken fark etmiş olabileceğiniz gibi, JSON dosyasında bu verilerin orijinal türü saklanmaz. Unity, doğru alandaki doğru değeri okumak için şablon argümanına ihtiyaç duyar.

Örneğimizi genişletmek için PlayerData myData = JsonUtility.FromJson<PlayerData>(json); myData'yı JSON dizesindeki değerlerle dolduracaktır.

JsonUtility'nin Sınırlamaları

Unity'nin performans ve basitlik için tasarlanmış JsonUtility sınıfında bazı sınırlamalar vardır. JsonUtility, ilkel türler, diziler, listeler veya sözlükler üzerinde çalışmaz.

Tahmin edebileceğiniz gibi, JsonUtility yalnızca Serileştirilebilir tür - MonoBehaviour veya üzerine [Serializable] özniteliğini ekleyebileceğiniz yazdığınız diğer sınıflar/yapılar üzerinde çalışır. Birden fazla veri parçası içeren bir sınıfı kaydetmeye çalışırsanız ve bunlardan biri kaydedilmezse, bunun nedeni muhtemelen seri hale getirilebilir olmamasıdır. Örneğin, ortasında dictionary bulunan bir sınıfı JSON'a dönüştürürseniz, seri hale getirilemediği için dictionary kaydedilmez.Bir sınıfta düzgün bir şekilde kaydedilmeyen bir şey varsa, bunun serileştirilebilir bir tür olduğundan emin olun!

Daha fazla bilgi için JSON Serileştirme ile ilgili Unity belgelerine bakın.

Veri kaydetmeyle İlgili Sorunları Giderme

Tahmin edebileceğiniz gibi, JsonUtility yalnızca Serileştirilebilir tür - MonoBehaviour veya üzerine [Serializable] özniteliğini ekleyebileceğiniz yazdığınız diğer sınıflar/yapılar üzerinde çalışır.

Birden fazla veri parçası içeren bir sınıfı kaydetmeye çalışırsanız ve bunlardan biri kaydedilmezse, bunun nedeni muhtemelen seri hale getirilebilir olmamasıdır. Örneğin, çok fazla veri ve ortasında bir sözlük bulunan bir sınıfı JSON'a dönüştürdüğünüzü hayal edin. Bu sözlük kaydedilmeyecek çünkü seri hale getirilemez. Bir sınıfta düzgün bir şekilde kaydedilmeyen bir şey varsa, bunun serileştirilebilir bir tür olduğundan emin olun!

Adım 6.6 SaveData Sınıfı Ekleyin

Kullanıcının son seçtiği rengi kaydetmek ve yüklemek için MainManager sınıfında üç şeye ihtiyacınız olacak:

  • Rengi depolayan bir SaveData sınıfı.
  • Bu sınıfı JSON biçimine dönüştüren ve bir dosyaya yazan bir Save metodu.
  • JSON dosyasındaki verileri tekrar SaveData sınıfına dönüştüren bir Load metodu.

SaveData sınıfıyla başlayalım:

  • IDE'nizde MainManager.cs'i açın.
  • MainManager sınıfının sonuna (kapanış ayracı sonuna) aşağıdaki kodu ekleyin:
[System.Serializable]
class SaveData
{
    public Color TeamColor;
}

Yeni kodu inceleyin

SaveData, yalnızca kullanıcının seçtiği rengi içeren basit bir sınıftır. Üstüne bir [System.Serializable] özniteliği eklediğinizi unutmayın. Bu satır, az önce öğrendiğiniz gibi JsonUtility için gereklidir - yalnızca Serileştirilebilir olarak etiketlenmişlerse işleri JSON'a dönüştürür.

Neden bir sınıf oluşturuyorsunuz ve MainManager örneğini doğrudan JsonUtility'ye vermiyorsunuz? Eh, çoğu zaman derslerinizdeki her şeyi kaydetmezsiniz. Yalnızca kaydetmek istediğiniz belirli verileri içeren küçük bir sınıf kullanmak iyi bir uygulamadır ve daha verimlidir.

Adım 6.7 SaveColor Metodu Ekleyin

Ardından SaveColor yöntemini ekleyelim:

  • SaveData sınıfından sonra boş bir satır bırakın.
  • Aşağıdaki kodu ekleyin:
public void SaveColor()
{
    SaveData data = new SaveData();
    data.TeamColor = TeamColor;

    string json = JsonUtility.ToJson(data);
  
    File.WriteAllText(Application.persistentDataPath + "/savefile.json", json);
}
  • Komut dosyasına yeni bir ad alanı eklememiz gerektiğinden, son satır IDE'nizde bir hata olarak vurgulanacaktır. Komut dosyanızın en üstüne aşağıdakileri ekleyin:
using System.IO;

Yeni Kodu İnceleyin

Bu yeni metodu sırayla inceleyelim. İlk olarak, kaydetme verilerinin yeni bir örneğini oluşturdunuz ve ekip renk sınıfı üyesini MainManager'da kaydedilen TeamColor değişkeniyle doldurdunuz:

SaveData data = new SaveData();
data.TeamColor = TeamColor;

Ardından, bu örneği JsonUtility.ToJson ile JSON'a dönüştürdünüz:

string json = JsonUtility.ToJson(data);

Son olarak, bir dosyaya bir dize yazmak için File.WriteAllText özel metodunu kullandınız:

File.WriteAllText(Application.persistentDataPath + "/savefile.json", json);

İlk parametre dosyanın yoludur. Application.persistentDataPath adında, uygulamanın yeniden yüklenmesi veya güncellenmesi arasında hayatta kalacak verileri kaydedebileceğiniz ve buna savefile.json dosya adını ekleyebileceğiniz bir klasör verecek olan bir Unity yöntemi kullandınız.

Note: Unity Komut Dosyası API'si, platform başına gerçek yolları listeler.

İkinci parametre, o dosyaya yazmak istediğiniz metindir - bu durumda JSON'unuz!

Adım 6.8 Bir LoadColor Metodu Ekleyin

Şimdi LoadColor metodunu ekleyelim:


public void LoadColor()
{
    string path = Application.persistentDataPath + "/savefile.json";
    if (File.Exists(path))
    {
        string json = File.ReadAllText(path);
        SaveData data = JsonUtility.FromJson<SaveData>(json);
  
        TeamColor = data.TeamColor;
    }
}

Yeni Kodu İnceleyin

Bu metod, SaveColor metodunun tersidir:

string path = Application.persistentDataPath + "/savefile.json";  

Bir .json dosyasının olup olmadığını kontrol etmek için File.Exists yöntemini kullanır. Olmazsa, hiçbir şey kaydedilmemiştir, bu nedenle başka bir işlem yapılması gerekmez. Dosya varsa, yöntem içeriğini File.ReadAllText ile okuyacaktır:

if (File.Exists(path))
{
    string json = File.ReadAllText(path);  

Daha sonra elde edilen metni tekrar SaveData örneğine dönüştürmek için JsonUtility.FromJson'a verir:

SaveData data = JsonUtility.FromJson<SaveData>(json);  

Son olarak, TeamColor'ı o SaveData'da kaydedilen renge ayarlayacaktır:

TeamColor = data.TeamColor;  

Yeni Kodunuzu İki Kez Kontrol Edin

Devam etmeden önce, MainManager sınıfı kapsamında olduğundan emin olmak için eklediğiniz kodu iki kez kontrol edin:

[System.Serializable]
class SaveData
{
   public Color TeamColor;
}
public void SaveColor()
{
   SaveData data = new SaveData();
   data.TeamColor = TeamColor;

   string json = JsonUtility.ToJson(data);
 
   File.WriteAllText(Application.persistentDataPath + "/savefile.json", json);
}

public void LoadColor()
{
   string path = Application.persistentDataPath + "/savefile.json";
   if (File.Exists(path))
   {
       string json = File.ReadAllText(path);
       SaveData data = JsonUtility.FromJson<SaveData>(json);

       TeamColor = data.TeamColor;
   }
}  

Adım 6.9 Uygulamada Rengi Yükleyin ve Kaydedin

Neredeyse bitirdiniz, ancak önce uygulama başladığında kaydedilen rengi (varsa) yüklemeniz ve çıkışta rengi kaydetmeniz gerekir. Şimdi bunu uygulayalım:

  • MainManager.cs'de (hala açık olmanız gerekir), Awake yöntemini bulun.
  • Awake'in sonunda LoadColor yöntemini çağırın:
LoadColor();  
  • Değişikliklerinizi kaydedin, ardından IDE'nizde MenuUIHandler.cs dosyasını açın.
  • Start metodunun sonuna aşağıdaki kodu ekleyin:
ColorPicker.SelectColor(MainManager.Instance.TeamColor);

Bu satır, menü ekranı başlatıldığında MainManager'da (varsa) kaydedilen rengi önceden seçecektir.

  • Exit metodunun başına aşağıdaki kodu ekleyin:
MainManager.Instance.SaveColor();   

Bu satır, uygulamadan çıktığında kullanıcının en son seçtiği rengi kaydeder.

Adım 6.10 Test İşlevi Ekleyin

Son olarak, uygulamadan rengi anında kaydedip yükleyebilmeniz için MenuUIHandler'a bazı hızlı test işlevleri ekleyelim:

  • MenuUIHandler.cs dosyasına aşağıdaki iki yöntemi ekleyin:
public void SaveColorClicked()
{
    MainManager.Instance.SaveColor();
}

public void LoadColorClicked()
{
    MainManager.Instance.LoadColor();
    ColorPicker.SelectColor(MainManager.Instance.TeamColor);
}
  • Değişikliklerinizi kaydedin.
  • Bu yöntemleri Renk Yükle ve Kaydet düğmelerine bağlayın. Bu işlemi özetlemeniz gerekirse, Başlat düğmesini nasıl yapılandırdığınızı gözden geçirin.

Editörde Test Edin

Standart çıkışta kaydetme ve başlatmada yükleme dahil olmak üzere uygulamadaki değişikliklerinizi kapsamlı bir şekilde test edin.

Adım 6.11 Sonraki Adımlar

Bu eğitimde, uygulamanızdaki oturumlar arasında veri kalıcılığı uyguladınız, böylece kullanıcı tarafından seçilen son renk, uygulamayı yeniden yüklediğinde önceden seçilmiş olur. Harika şeyler! Ardından, yeni bir Unity projesinde temel bir oyun özetini karşılamak için öğrendiklerinizi uygulayarak bir gönderi hazırlayacaksınız.

Previous
Next

Lesson discussion

Swap insights and ask questions about “Unity Junior Programmer”.

Enroll to participate
Start the course to unlock the discussion. Enrolling helps us keep conversations relevant to learners.
Cohorts
WebsiteDiscoverBlogPatika.devRise In
CoursesCircleRustSoliditySolanaWeb3 FundamentalsBlockchain Basics
CompanyAbout UsTerms of UsePrivacy PolicyGDPR NoticeCookies
Don't miss any update!

Disclaimer: The information, programs, and events provided on https://cohorts.patika.dev is strictly for upskilling and networking purposes related to the technical infrastructure of blockchain platforms. We do not provide financial or investment advice, nor do we make any representations regarding the value, profitability, or future price of any blockchain or cryptocurrency. Users are encouraged to conduct their own research and consult with licensed financial professionals before engaging in any investment activities. https://cohorts.patika.dev disclaims any responsibility for financial decisions made by users based on the information provided here.

© 2026 Cohorts, All rights reserved