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

Nesne yönelimli programlamada kapsülleme

Bu eğitimde, nesne yönelimli programlamanın ikinci ayağını öğreneceksiniz: kapsülleme.

  • Yalnızca programlamacının amaçladığı şekilde kullanılabilen kod yazmak için kapsüllemenin nasıl kullanıldığını açıklayın.
  • Get ve set ile kapsülleme uygulayarak bir sınıf içindeki verilere erişimi kontrol edin.
  • Public değişkenler(özellikler), private değişkenler(alanlar) ve yerel değişkenlerde ayrım yapın.
  • Sınıfları yalnızca tek amaçlı kodu içerecek şekilde doğru şekilde düzenleyerek daha kolay okunabilirlik ve hata ayıklama sağlayın.

Adım 1: Genel Bakış

Soyutlamaya çok benzer şekilde, kapsülleme de büyük ölçüde kodunuzun altında yatan karmaşıklık ile onu kullanan diğer kodlar arasında bir ayrım düzeyi sağlamaya odaklanır. Benzerlikten dolayı, bazen OOP(nesne yönelimli programlama) uygulamaları grubunun bazı takipçileriyle soyutlama ve kapsüllemeyi, tipik olarak kapsülleme başlığı altında, tek bir sütunda göreceksiniz. Yine de, önemli olduğunu düşündüğümüz bir ayrım yapıyoruz: soyutlama, diğer programcılar için daha basit hale getirmek iin kodu özetlemekle ilgilidir, kapsülleme tamamen değerleri ve verileri korumakla ilgilidir, sanki bir kapsülün içindelermiş gibi,böylece başkalarının ne yaptığını kontrol edersiniz ve bunlara erişiminiz olmaz.

Adım 2: Kapsülleme nedir?

figures

Alt text: Soyutlama ile soldan sağa etiketlenmiş arka arkaya dört sütunun görüntüsü, Kapsülleme, Miras, and Polymorphism. Kapsülleme etiketli dördüncü sütun vurgulanıyor.

Kapsüllemenin ana teması, kodda güvenliktir -başka bir deyişle- kodun yalnızca amaçlandığı şekilde kullanılmasını ve manipüle ettiğiniz değerlerin ve verilerin bozulmamasını sağlamaktır. Kapsüllenmiş kodda, diğer programcılar değişkenlerin değerini veya nesnelerin özelliklerini kolayca değiştiremezler.Diğer scriptlerin kodunuza erişmesinin tüm yollarını hesaba katmak imkansızdır, bu nedenle, yalnızca amaçladığı gibi çalışabilmesi için yarattıklarınızı kapsüllemek çok daha iyidir.

Create with code başlığı altında kapsülleme kullandığımız bir duruma göz atalım, Unit 1 - Player Control ‘e geri dönelim. Aşağıdakiler, yolda ilerleyen bir aracı kontrol etmek için kullanılacak değişkenlerdi.

figures

Alt text: Create With code’da yapılan “Driving Simulation” prototipinden oynanış görüntüsü. Unit 1. Bir kasaya çarptıktan sonra yolda dönen mavi bir aracı gösterir.

public float speed = 20.0f;
public float turnSpeed = 45.0f;
public float horizontalInput;
public float forwardInput;

Bu kodu ilk yazdığınızda, tüm değişkenlerinizi public olacak şekilde ayarladınız,böylece oynatma modunda Inspector’da nasıl güncellendiklerini görebilirsiniz.O zamanlar programlamada yeni olduğunuz için, değişkenlerinizin değişen değerlerinin oyununuzu nasıl değiştirdiğini daha iyi anlamanıza yardımcı oldu. Değişkenlerinizi public hale getirmek, speed ve turnSpeed değerlerşnizi gerçek zamanlı test ederek aracın hareketinde ince ayar yapmanızı da sağladı.

Son sayılarınıza karar verdiğinizde, değişkenlerinizin değerini kilitlemek için private yaptınız

// all variables now private instead of public
private float speed = 20.0f;
private float turnSpeed = 45.0f;
private float horizontalInput;
private float forwardInput;

Artık kimsenin, kararlaştırdığınız değerleri kolayca –belki de yanlışlıkla- değiştirebilmesini istemiyordunuz. Olabildiğince basit, bu sizin kapsüllemeyle ilgili ilk deneyiminizdi. Değişkenlerinizin ve methodlarınızın erişilebilirliği, kapsüllemede önemli bir husustur. Genel bir kural olarak, değişkenlerinizi mümkün olduğunca sık private tutmak istiyorsanız,ve yalnızca methodları, herhangi bir yerden çağırmanız gerektiğinden emin olduğunuzda public olarak ayarlayın. Aksi takdirde herkes tarafından kullanılabilirler. Kendi başınıza küçük bir proje üzerinde çalışırken,kapsülleme önemli görünmeyebilir —aslında,her şeyi public hale getirmek uygun bile görünebilir.Yine de, Eğer başkalarıyla çalışıyorsanız, yada başkaları sizin kodlarınızla sonradan çalışacaksa, değişkenler ve methodlar gerçekten kullanılmaması gereken zamanlarda kullanılırsa, beklenmedik sorunlar kolaylıkla ortaya çıkabilir.

Adım 3: Private değişkenler ve Inspector görünürlüğü

Bir değişkeni public hale getirmek onu Inspector’da gösterir, ancak aynı zamanda uygulamanızın herhangi başka bir methodunda değiştirilebilmesini sağlar. İyi haber, değerleri Inspector’da kullanılabilir hale getirmenin bir yolu vardır,serialized(serileştirme) olarak da bilinen, değerleri diğer kodlara maruz bırakmadan Inspector’da kullanılabilir hale getirmenin bir yolu vardır. Bu size ,onları hala güvende tutarken, Inspector’daki değişkenleri değiştirme özgürlüğü verir. Aslında, bir değişkenin erişim niteleyicisi (public, private) aslında serileştirmeyi kontrol etmez ancak public değişkenler varsayılan olarak serileştirilir. [SerializeField] etiketini ekleyerek Inspector’da private değişkenlerinizi kolayca ortaya çıkarabilirsiniz.

public class Rabbit : MonoBehaviour 
{
    [SerializeField] // Inspectorda private değişkenleri ortaya çıkarır.
    private Color furColor;
}

figures

Adım 4: Projenizde savunmasız bir public değişken bulun

Değerleri kötüye kullanımdan korumak için tüm değişkenlerinizi private yapmak kolay olurdu, ama gerçekten publlic olması gereken değikenler ne olacak? Onları nasıl koruyorsunuz? Hadi projemizde bir örnek üzerinden çalışalım.

MainManager.cs’ de, ardından public değişkeni eklediniz:

public static MainManager Instance;

Bu değişkeni private yapamazsınız çünkü ona erişmesi gereken diğer scriptlerde hatalara neden olur, ancak bunu public bırakmak, olası kötüye kullanıma karşı savunmasız olduğu anlamına gelir. Sorunu göstermek için biraz yaramazlık yapalım:

  • Deneysel amaçlar için, MenuUIHandler.cs scriptinde, Start() methodunun sonuna MainManager Instance’ı null(boş) olarak ayarlayan bir kod satırı ekleyin.
MainManager.Instance = null;
  • Renk seçim düğmelerini seçerek uygulamanızı test edin. Şimdi Console’da Null Reference Exception dönüşü alacaksınız.

figures

Alt text: Null Reference Exception hatası görüntüleyen Concole penceresinin yanında mavi renk seçili olarak Warehouse projesi Menu sahnesinin, Game penceresi görünümü.

Değişkene public erişimi sağlarken bu tür kötüye kullanımı önlemenin bir yoluna ihtiyacımız var.

Adım 5: Getter ve Setter ile Özellik Oluşturun

Esasen, yapmak istediğimiz, değişkeni “salt okunur” yapmak, diğer sınıfların değeri almasına izin vermek,ama değeri ayarlatmamak. Bunu yapmak için değişkenlerimizin nasıl ve ne zaman kullabılabileceğini kontrol edecek, C# get ve set methodlarını kullanabiliriz.

  • MainManager.cs’ de, MainManager Instance değişkeninizin sonuna bir get erişimcisi ekleyin:
public static MainManager Instance { get; } // satır sonuna get ekle

Bir değişkene bir get veya set erişimcisi eklediğiniz anda, bu değişkenbu özel yöntemlerle dahili verilere erişim sağlayam özel bir değişken türü yani bir Property(özellik) olur.

  • Set erişimcisi olmadan,bu özellik kesinlikle salt okunurdur, değeri hiçbir yerde ayarlanamaz.Bu nedenle, MenuUIHandler.cs’ de daha önce eklediğiniz o yaramaz kod satırında artık bir hata var.Bu iyi, başka bir sınıfın onu sıfırlayabilmesini istemiyoruz, böylece artık o kod satırını silebilirsiniz.
// MainManager.Instance = null; // bu kod satırını silin ve yorum yapın
  • Yine de, hala bir problem var: özellik kesinlikle salt okunur olduğundan, kendi sınıfında bile ayarlanamaz, MainManager.cs’de satırda bu da hataya sebep oluyor.

Instance = this;.Bunu düzeltmek için, bu hatayı çözmesi gereken özelliğe özel bir set ekleyin:

public static MainManager Instance { get; private set; } //  özel ayarlayıcı(set) ekle

Bu kod ile, artık özelliğin değerini sınıf içinden ayarlayabilir(set), ancak yalnızca sınıfın dışından alabilirsiniz(get).O yalnızca kendi sınıfındaki değişkenleri kabul edecek şekilde, dış dünyadan kötüye kullanımdan ve bozulmadan korunacak şekilde kapsüllenmiştir!

Adım 6: Ayarlayıcı doğrulama ihtiyacını bulun

Yukarıda eklediğiniz get ve set, yalnızca değeri aldığınız veya ayarladığınız en temel kapsülleme biçimini temsil eder— hiçbir şey fantezi değil. Bu basiy uygulamaya auto-implemented property(otomatik uygulanan özellik) denir.

{ get; private set; }

Ancak bir değerin ayarlanabileceğini kısıtlamak veya ayarlanabilir olmasının yanı sıra, bir değerin daha özelleştirilmiş, manuel bir şekilde nasıl ayarlanabileceğini de kısıtlamak isteyebilirsiniz. Örneğin, başka bir sınıfın tarihi ayarlamasına izin veren bir uygulamada, ayı 1 ile 12 arasında bir sayı ile sınırlayabilirsiniz. Veya negatif sayıların kullanılmasını engellemek isteyebilirsiniz.

Warehouse projemizde, tam olarak bunu yapabileceğimiz bir yer var: asla negatif bir sayıya ayarlanmaması gerken bir Production Speed değişkenimiz var.

  • ResourcePile.cs’ de , public ProductionSpeed değişkeninde korunmayan alanları bulun.
public float ProductionSpeed = 0.5f;

Ayrıca bu public değişkenin bir sabitle çarpıldığı ProductivityUnit.cs içindeki satırı bulun.

m_CurrentPile.ProductionSpeed *= ProductivityMultiplier;

Bizi, kendimizin gelecekteki bir versiyonunu veya başka bir kaygısız geliştiriciyi, bu proje için sorunlara neden olacak şekilde negatif bir sayıya ayarlamaktan alıkoyan hiçbir şey yok.

  • Deneysel amaçlar için, production speed’ten çarpmak yerine çıkarmak için bu kod satırını yaramaz bir şekilde değiştirin.
m_CurrentPile.ProductionSpeed -= ProductivityMultiplier; // replace '*=' with '-='

Ardından uygulamanızı test edin ve Productivity Unit’I(verimlilik birimini) kullanarak olumsuz bir sonuç elde edin:

figures

Alt text:warehouse sahnesinden mesajı görüntüleyen kullanıcı arayüzü ekranı açılır penceresi, “Resource Type 2 Producing at the speed of -1.5/s.”

İhtiyacımız olan, bu değişkenin asla negatif bir değere ayarlanmamasını sağlayan özel bir ayarlayıcı.

Adım 7: Arka alanı olan bir özellik yapın

Bir get veya set içinde doğrulamalar veya hesaplamalar yapmak için özelliğiniz için bir arka alanına ihtiyacınız vardır: public özellik tarafından açığa çıkarılan verileri depolayan özel bir alan (değişken)

Bunu bağlamda görelim.

  • ResourcePile.cs’ de, ProductionSpeed ile aynı adı kullanarak bir private değişkeni (arka alanı) ekleyin, ancak bunun yerine değeri bu yeni özel alanda saklayın:
private float m_ProductionSpeed = 0.5f; // yeni private arka alanı ekle
public float ProductionSpeed; //public özellikten değeri kaldır
  • Arka alanı bildirildiğinde, artık biri public özelliğe eriştiğinde yedekleme alanını alan veya atayan get ve set işlevlerini manuel olarak ekleyebilirsiniz.
private float m_ProductionSpeed = 0.5f;
public float ProductionSpeed // noktalı virgülü sil
{
    get { return m_ProductionSpeed; } // get arka alanı döndürür
    set { m_ProductionSpeed = value; } // set arka alanı kullanır
}

Bunlar basit get ve set methodları olmayacağı için “{get; set;}” stenografisini daha önce otomatik olarak uygulanan özellik ile kullandık.

Bunun yerine, manuel olarak yapıyoruz. Birisi ProductionSpeed özelliğini aldığında(get),arka alanını döndürür. Biri ProductionSpeed özelliğini ayarladığında(set), arka alanı, girdikleri değere ayarlanır.

  • Ardından, veriler artık public özellik yerine arka alanda depolandığından, özelliğe yapılan referanslar private alanla değiştirilmelidir. ResourcePile.cs’ de, ProductionSpeed’e yapılan iki referansı m_ProductionSpeed’ e aktarın.
...
m_CurrentProduction += m_ProductionSpeed * Time.deltaTime; // swap in m_ version
...
return $"Producing at the speed of {m_ProductionSpeed}/s"; // swap in m_ version

Şimdi, ne zaman biri public özelliği almaya veya ayarlamaya çalışsa, set veya get aracılığıyle sınıfta kapsüllenmiş destek alanına erişir. Ancak set doğrulamasını henüz uygulamadık, bu nedenle negatif sayı hala mümkün! Bunu hemen düzelteceğiz.

Adım 8: Negatif sayıları önlemek için set doğrulamasını uygulayın

Son olarak, yapılandırılan her şeyle, artık Production Speed’in her zaman pozitif bir sayı olmasını sağlayarak, belirlenen yöntem içinde bir doğrulama denetimi uygulayabiliriz. Aslında negatif bir sayı denenirse Concole’da bir uyarı mesajı bile görüntüleyebilirsiniz.

  • Set yöntemi içinde, değer negatifse bir uyarı mesajı görüntüleyen, ancak pozitifse değeri başarıyla ayarlayan bir if-else ifadesi ekleyin.
set
{
    if (value < 0.0f)
        {
            Debug.LogError("You can't set a negative production speed!");
        }
        else
        {
          m_ProductionSpeed = value; //orjinal ayarlayıcı şimdi if/else ifadesinde
        }
    }
}
  • Uygulamanızı tekrar test edin ve production speed negatif bir sayıya ayarlandığında ne olduğunu görün. Hata mesajını göstermelidir.

figures

Alt text: “You can’t set a negative production speed!” hata mesajını görüntüleyen Console penceresinin yanındaki warehouse sahnesinin oyun görünümü.

  • Ayarlayıcı doğrulaması tamamen uygulanmış ve test edilmişken, artık ProductivityUnit’I çıkarma operatörü yerine çarpma ile normal çalışmasına döndürebilirsiniz.
m_CurrentPile.ProductionSpeed *= ProductivityMultiplier; //  '-=' ten '*=' e geri al

Adım 9: Özet

Kapsülleme, değerlere erişilme ve değiştirilme biçimlerini denetleyerek kodunuzu korur, böylece kodunuz yalnızca açıkça tasarlandığı şekilde kullanılır.Soyutlama gibi, kapsüllerde kodunuzun altında yatan karmaşıklık ile ona erişilebilecek programcılar arasında bir ayrım katmanı yerleştirir. Projede, bir değişkeni harici sınıflara salt okunur yapmak için otomatik olarak uygulanan bir özellik kullandınız. Ardından, negatif bir sayıya ayarlanmasını önlemek için bir get verisi ve set verisi yazdınız. Artık bu iki veri parçasının da kapsüllenmiş olduğunu, yaramazlık veya yanlış kullanımdan korunduğunu bilerek sağlıklı bir şekilde uyuyabilirsiniz.

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