Ünite 7 / 11

Kod Üretimi ve Motor Entegrasyonu: Unity (C#) ve Unreal (Blueprint/C++)

Kazanimlar:

  • Motor, sürüm, dil ve mimari bağlamı vererek yapay zekadan güvenilir, derlenebilir oyun kodu üretebilme ve kodu okuyup anlayarak entegre edebilme
  • Oyun koduna özgü performans (her karede tahsis), motor yaşam döngüsü ve halüsinasyon risklerini derleme, test ve profil ile yönetebilme
  • Çok oyunculu oyunlarda sunucu-otoriterlik ilkesini uygulayıp güvenlik bilgisini yalnızca kendi oyununu savunmak ve doğrulamak için sorumlu biçimde kullanabilme

Oyun bir yazılımdır; ne kadar iyi tasarlanırsa tasarlansın, kodla hayata geçer. Oyun motoru (engine) oyunun çalışmasını sağlayan altyapıdır: Unity (C# diliyle betiklenen, geniş kullanımlı motor) ve Unreal Engine (C++ ve görsel betikleme dili Blueprint kullanan motor) en yaygın ikisidir. YZ, kod üretiminde en olgun yardımcılardan biridir: oyuncu kontrolcüsü, envanter sistemi, durum makineleri, kaydetme/yükleme, arayüz mantığı, hata ayıklama ve refactoring (kodu davranışını bozmadan yeniden düzenleme). Ama oyun kodunun kendine özgü tuzakları vardır: performans (kare hızı — frame rate), motor yaşam döngüsü, çok oyunculu güvenlik. Bu ünitede YZ'yi oyun kodunda güvenli ve verimli kullanmayı öğreneceksiniz.

Kritik ilke: motor ve sürüm bağlamı

YZ, hangi motor ve sürüm için yazdığını bilmezse karışık, eskimiş veya var olmayan API üretir. Bu yüzden her kod isteminde motor, sürüm, dil ve mimari bağlamını verin. "Unity için oyuncu hareketi yaz" zayıftır; "Unity 2022.3, C#, yeni Input System, Rigidbody tabanlı fizik hareketi" güçlüdür. Unreal'da Blueprint mi C++ mı istediğinizi, hangi sürümü kullandığınızı belirtin.

Adım adım güvenli kod akışı:

  1. Bağlamı ver (motor, sürüm, dil, mevcut mimari, kısıtlar).
  2. Küçük ve tanımlı iste (tüm sistemi değil, tek bileşeni).
  3. Kodu oku ve anla (ne yaptığını satır satır kavra; anlamadığın kodu koyma).
  4. Derle ve test et (motorda çalıştır; profil çıkar — performans ölç).
  5. Refactor ve entegre et (proje standardına uydur).
İpucu: YZ'den kod isterken "yorum satırlarıyla açıkla" deyin. Amacınız kodu anlamak; anlamadığınız YZ kodunu projeye koymak, bakımı imkânsız bir borç biriktirir. Ayrıca kodu küçük, test edilebilir parçalar halinde isteyin: 500 satırlık bir sistem yerine, tek bir tanımlı işi yapan 30-50 satırlık bir bileşen hem doğrulaması hem entegrasyonu kolaydır.

Oyun koduna özel tuzaklar

Performans. Oyun kodu saniyede 30-60+ kez çalışır. YZ, her karede çalışan Update döngüsüne pahalı işlemler (bellek ayırma, arama, string işleme) koyabilir; bu kare hızını düşürür. Performans kritik kodları profilleyin ve YZ'ye "her karede çalışacak, tahsis yapma" gibi kısıt verin.

Motor yaşam döngüsü. Unity'de Awake/Start/Update, Unreal'da BeginPlay/Tick gibi özel metotların ne zaman çağrıldığını YZ bazen karıştırır. Yaşam döngüsü hatalarını test ederek yakalayın.

Çok oyunculu güvenlik. Bu bilişim/güvenlik açısından en kritik konudur. Çok oyunculu oyunda istemciye asla güvenmeyin (never trust the client): oyuncunun bilgisayarındaki istemci hile için değiştirilebilir. Puan, hasar, para gibi kritik durumu sunucuda doğrulayın (server-authoritative). YZ'nin ürettiği ağ kodunu bu ilkeye göre denetleyin; YZ istemciye güvenen açık üretmişse düzeltin. Bu bilgiyi yalnızca kendi oyununuzu savunmak ve doğrulamak için kullanın; başkasının sunucusuna izinsiz erişim veya hile geliştirmek yasa dışı ve etik dışıdır.

Dikkat: YZ'nin ürettiği kod güvenlik açığı içerebilir (girdi doğrulaması eksik, istemciye güven, kaydetme dosyası manipülasyonu). Kodu körlemesine kabul etmeyin; özellikle ağ, ekonomi ve kaydetme kodunda güvenlik gözden geçirmesi yapın.

Mimari ve bakım borcu

YZ tek tek fonksiyonları hızlı üretir; ama bir oyunun mimarisi — sistemlerin nasıl bölündüğü, birbirleriyle nasıl konuştuğu, verinin nerede tutulduğu — uzun vadeli bir karardır ve insana aittir. YZ'ye "tüm envanter, savaş ve kaydetme sistemini bir arada yaz" derseniz, çalışan ama birbirine sıkı bağlı, bakımı zor, büyütülemez bir yumak alırsınız. Bunun yerine mimariyi siz tasarlayın, YZ'yi tanımlı arayüzlere (interface) sahip küçük bileşenleri doldurmak için kullanın. İyi mimari, oyun büyüdükçe fark yaratır: kötü kararlar bir yıl sonra her yeni özelliği geciktiren bir teknik borç olarak geri döner.

Bakım borcunun bir başka kaynağı, anlaşılmadan projeye giren koddur. YZ'nin yazdığı bir sistem bugün çalışabilir; ama altı ay sonra onu değiştirmeniz gerektiğinde, kimse ne yaptığını hatırlamıyorsa borç faize döner. Bu yüzden iki disiplin şarttır: kodu üretim anında okuyup anlamak ve YZ'den açıklayıcı yorumlar istemek. Bir kural olarak, projenize kendi başınıza yeniden yazamayacağınız veya en azından satır satır açıklayamayacağınız hiçbir YZ kodunu koymayın. YZ hızı verir; sürdürülebilirliği sizin disipliniz verir.

Üç mini vaka

Vaka 1 — Sürüm bağlamı hatayı önledi. Bir programcı önce "Unity için envanter yaz" dedi; kod eski bir API kullanıyordu, derlenmedi. Sonra "Unity 2022.3, C#, ScriptableObject tabanlı" bağlamını verdi; kod ilk seferde derlendi ve projeye uydu. Bağlam, bir saatlik hata ayıklamayı önledi.

Vaka 2 — Performans tuzağı. Bir oyunda kare hızı düşüktü. Profil çıkarınca YZ'nin ürettiği bir Update metodunun her karede yeni liste tahsis edip düşman aradığı görüldü. Kod, önbelleğe alınmış referans ve karesel olmayan güncelleme ile düzeltilince kare hızı 42'den 60'a çıktı.

Vaka 3 — Güvenlik açığı yakalandı. Çok oyunculu bir oyunda YZ'nin ürettiği kod, hasarı istemcide hesaplayıp sunucuya bildiriyordu; bu, hile için açıktı (istemci sonsuz hasar gönderebilirdi). Kod sunucu-otoriter hale getirildi (hasarı sunucu hesaplar). Denetim, yayından sonra doğacak bir hile skandalını önledi.

Dört kopyalanabilir şablon

1) Bağlamlı kod isteği:

Motor: Unity 2022.3. Dil: C#. Mimari: [ör. component tabanlı].Kısıt: Update'te tahsis yapma; okunabilir ve yorumlu olsun.Görev: [tek, tanımlı bileşen, ör. "çift zıplama yapankarakter kontrolcüsü"]. Kullandığın her API'nin bu sürümdeolduğunu doğrula; emin değilsen belirt.

2) Kod açıklama/inceleme:

Aşağıdaki kodu satır satır açıkla ve (1) ne yaptığını,(2) olası performans sorunlarını (her karede tahsis, pahalıarama), (3) olası hataları, (4) iyileştirme önerilerini yaz.Kod: [yapıştır]

3) Çok oyunculu güvenlik denetimi:

Aşağıdaki çok oyunculu kodu güvenlik açısından incele.Özellikle: istemciye güvenilen yerler, sunucuda doğrulanmasıgereken kritik durum (hasar, puan, para), girdi doğrulamaeksikleri. Sunucu-otoriter hale getirmek için düzeltme öner.Bu yalnızca kendi oyunumu savunmak içindir. Kod: [yapıştır]

4) Performans profil odaklı refactor:

Bu kod her karede çalışıyor ve kare hızını düşürüyor: [kod].Tahsisleri, pahalı aramaları ve gereksiz her-kare işlemlerinibul; önbellekleme ve daha seyrek güncelleme ile davranışıbozmadan optimize et. Değişiklikleri açıkla.

Zayıf prompt / Güçlü prompt

Zayıf prompt:

Unity'de kaydetme sistemi yaz.

Sürüm, format, veri kapsamı, güvenlik yok; sonuç genel ve riskli.

Güçlü prompt:

Motor: Unity 2022.3, C#. Görev: JSON tabanlı kaydetme/yüklemesistemi. Kaydedilecek: oyuncu konumu, envanter, ilerleme.Kısıt: dosya bozulmasına karşı hata yönetimi olsun; kayıtdosyası oyuncu tarafından kolayca değiştirilip hileyapılmasına karşı bir bütünlük kontrolü (hash) ekle.Kodu yorumla ve her API'nin bu sürümde olduğunu doğrula.

Sürüm, kapsam, hata yönetimi ve bütünlük kontrolü çıktıyı sağlamlaştırır.

Motor/dil bağlam tablosu

Motor

Dil

YZ'ye vermen gereken

Özel dikkat

Unity

C#

Sürüm, Input/fizik sistemi

Update tahsisi, yaşam döngüsü

Unreal

Blueprint

Sürüm, düğüm bağlamı

Görsel mantık sınırları

Unreal

C++

Sürüm, modül yapısı

Bellek, GC, makrolar

Çok oyunculu

Her ikisi

Ağ modeli

Sunucu-otoriterlik

Sık yapılan hatalar

  • Motor/sürüm belirtmemek. Eskimiş veya uydurma API gelir.
  • Anlamadan koda güvenmek. Bakımı imkânsız borç birikir.
  • Performansı ölçmemek. Her-karede tahsis sessizce kare hızını düşürür.
  • İstemciye güvenmek. Çok oyunculuda hile açığı doğar.
  • Tüm sistemi tek seferde istemek. Küçük, test edilebilir parça daha güvenlidir.

Özetle

YZ oyun kodunda güçlü bir yardımcıdır ama motor, sürüm ve mimari bağlamı ister. Kodu okuyup anlamadan, derleyip test etmeden ve performansla güvenliği denetlemeden projeye koymayın. Çok oyunculuda sunucu-otoriterlik ilkesini koruyun ve güvenlik bilgisini yalnızca savunma ve doğrulama amacıyla kullanın.

Uygulama görevi

Küçük bir bileşen seçin (ör. çift zıplama veya basit envanter). "Bağlamlı kod isteği" şablonuyla motor ve sürüm vererek kod üretin. Ardından "Kod açıklama/inceleme" şablonuyla aynı kodu inceleteek performans ve hata risklerini çıkarın. Kodu motorda derleyip test edin.

Kontrol listesi

  • [ ] Motor, sürüm, dil ve mimari bağlamını verdim.
  • [ ] Kodu okuyup anladım; yorumlu istedim.
  • [ ] Motorda derleyip test ettim ve performansı ölçtüm.
  • [ ] Ağ/ekonomi/kaydetme kodunda güvenlik denetimi yaptım.
  • [ ] Güvenlik bilgisini yalnızca kendi oyunumu savunmak için kullandım.