İçeriğe geç

Mobil oyun · Sonsuz koşu · Geliştiriliyor

Son Mesai Out of Office

“Yapay zeka işini aldı. Sıra sende.”

Şirketin son insan çalışanısın. İK robotu İK-9000 elinde çıkış belgesiyle peşinde. Üç şeritte koş, engellerden kaç, altın topla. Ama dikkat: oyun seni izliyor ve öğreniyor.

  • Unity 6
  • C#
  • Android · iOS
  • Türkçe · English
Son Mesai ana menüsü: Grafiker karakteri ve büyük OYNA butonu
Son Mesai oynanış ekranı: Yazılımcı üç şeritli yolda altın dizisine doğru koşuyor
  • 3Meslek, her biri kendi yeteneğiyle
  • 8Güçlendirme: CAPTCHA'dan kargo dronuna
  • 7Assembly: 6 katman ve editör araçları, tek yönlü bağımlılık
  • 10K+Satır C#, koşuda sıfır bellek ayırma hedefi
Hikâye

Yıl 2031. Yapay zeka bütün işleri aldı. Bir kişi hariç.

Dev bir şirketin plazasında son insan çalışan sensin. İK robotu İK-9000 bir imza peşinde: çıkış belgesini imzalatırsa "optimize edilirsin".

Hedefin, sinyalin çekmediği efsanevi Analog Kasaba. Yol boyunca sunucu kabinleri, robot süpürgeler, otonom taksiler ve "Çerezleri kabul et" duvarları seni durdurmaya çalışır.

Mizah kurumsal dünyayla ve yapay zeka jargonuyla dalga geçer: kalkanın adı Kıdem Kalkanı, mıknatısın adı Maaş Mıknatısı, robotu durduran şey bir CAPTCHA kutusu. Kimse hedef alınmaz; alay edilen şey ofis kültürü ve teknoloji modaları.

OPTİMİZE EDİLDİN
Yakalandığında ekranda yazan cümle.
Oyun sonu ekranı: OPTİMİZE EDİLDİN, İK-9000 SENİ YAKALADI, Yazılımcı OTOMATİKLEŞTİ

Oyunu farklı kılan iki mekanik

01Seni öğrenen yapay zeka

Engeller alışkanlıklarını öğrenir

Oyun hangi şeritte ne kadar kaldığını izler ve engelleri en sevdiğin şeritlere yöneltir. Kendi verinle eğitilen bir rakibe karşı koşarsın.

  • Şerit başına geçirilen süreyi sayar, her karede eski veriyi azar azar unutur.
  • Hafıza koşular arasında korunur; alışkanlığını değiştirirsen o da değişir.
  • Her engel dizisinde en az bir şerit mutlaka açık kalır. Zor ama hep adil.
AdaptiveDirector.cs
Grafiker engele çarpıp tökezliyor, önünde yeni engeller

02Meslek otomasyonu

Yakalanan meslek robota dönüşür

Karakterler birer meslektir. Yakalandığında oynadığın meslek "otomatikleşir": kilitlenir ve sonraki koşularda o mesleğin robotu karşına engel olarak çıkar.

  • Yazılımcının robotu üstüne koşar, Grafikerinki şeritler arasında gidip gelir.
  • Meslek altınla geri alınır: bedel 100'den başlar, her otomatikleşmede 1,5 katına çıkar.
  • Stajyer otomatikleşmez; kilitli meslek seçiliyse koşuya o çıkar.
Workforce.cs
Otomatikleşen Yazılımcının mavi robotu Stajyere doğru koşuyor
İçerik

Kim kimdir, ne işe yarar?

Meslekler3

  • Yazılımcı18 sn bekleme

    Debug: öndeki 45 metredeki engelleri siler.

  • Grafiker22 sn bekleme

    Yeniden Çiz: 3 saniye boyunca engellerin içinden geçer.

  • StajyerSon çare

    Yeteneği yok ama otomatikleşmez. Her zaman oynanabilir.

Engeller5

  • Sunucu KabiniŞerit değiştir

    Sabit duran dev kabin.

  • Çerez DuvarıKay

    "Çerezleri kabul et" yazan duvar.

  • Robot SüpürgeZıpla

    Yerde dolaşan alçak engel.

  • Kargo DronuKay

    Şeritler arasında süzülür.

  • Otonom TaksiŞerit değiştir

    Sana doğru gelir.

Güçlendirmeler8

  • CAPTCHA6 sn

    İK-9000 "Ben robot değilim" kutusunda takılır.

  • Halüsinasyon5 sn

    Engeller sahteleşir, içlerinden geçilir.

  • Kıdem Kalkanı12 sn

    Tek çarpışmayı affeder.

  • Kargo Dronu8 sn

    Seni havaya kaldırır, engellerin üstünden uçarsın.

  • Maaş Mıknatısı10 sn

    Altınları sana çeker.

  • Fazla Mesai x212 sn

    Puanı ikiye katlar.

  • Çift Espresso10 sn

    Daha yükseğe zıplatır.

  • Sürpriz PaketAnında

    Koşu sonunda açılır: altın, sandalye ya da giriş kartı.

Kod yapısı

Oyun gibi değil, ürün gibi kurgulanmış kod.

Her klasör ayrı bir assembly ve bağımlılık yalnızca tek yöne akar. Sistemler birbirini tanımaz; tipli bir sinyal veri yoluyla haberleşir. Yeni bir karakter, engel ya da güçlendirme eklemek için kod yazılmaz.

Katmanlar ve bağımlılık yönü

  1. Core

    Saf sözleşmeler: sinyaller, durum makinesi, servis arayüzleri.

    Hiçbir şeye bağlı değil

  2. Data

    ScriptableObject tanımları, etkiler ve hareket desenleri.

    Bağlı olduğu→ Core

  3. Gameplay

    Koşu, oyuncu, kovalayan, dünya ve etki sistemleri.

    Bağlı olduğu→ Core→ Data

  4. Infrastructure

    Kayıt, nesne havuzu, girdi, çeviri, kare hızı.

    Bağlı olduğu→ Core

  5. UI

    UI Toolkit sunucuları. Oynanışı hiç tanımaz.

    Bağlı olduğu→ Core

  6. Bootstrap

    Somut sınıfları bilen tek yer (VContainer).

    Bağlı olduğu→ Hepsi

Data/Effects/MagnetEffect.cs
[CreateAssetMenu(menuName = "Out of Office/Effects/Magnet")]
public sealed class MagnetEffect : EffectDefinition
{
    [Min(0f)] public float radius = 7f;

    public override void Apply(EffectContext context)
    {
        context.Player.MagnetRadius = radius;
    }

    public override void Remove(EffectContext context)
    {
        context.Player.MagnetRadius = 0f;
    }
}
Maaş Mıknatısı'nın tamamı. Yeni bir etki türü böyle eklenir; güçlendirme ise bu etkileri birleştiren bir asset'tir.

Kurallar

  • 01

    Sistemler birbirini tanımaz

    49 tipli sinyal, hepsi readonly struct. Arayüz istek atar, oynanış karar verir, sonucu olay olarak duyurur.

  • 02

    Oyun durumu tek elde

    Durumu yalnızca GameFlow değiştirir (StateMachine<GameState>). Geçersiz istek sessizce yok sayılır.

  • 03

    İçerik veridir

    Meslek, engel, güçlendirme, aksesuar, dünya ve mağaza ürünü birer ScriptableObject. Yeni içerik bir asset demektir.

  • 04

    Yeni davranış, tek yeni sınıf

    Her etki EffectDefinition'dan, her hareket MovementPattern'dan türer. Var olan kod değişmez (açık/kapalı ilkesi).

  • 05

    Koşuda bellek ayırma yok

    Engel, altın, zemin ve efekt havuzdan gelir. Kare döngüsünde LINQ, new liste ya da lambda yakalama yok.

  • 06

    Kıvrımlı dünya shader'ı

    Yol sağa sola kıvrılır, uzakta aşağı eğilir. Tamamen görsel: özel HLSL shader köşe noktalarını büker, çarpışmalar düz dünyada kalır.

Teknolojiler

  • Unity 6 (6000.6)
  • C#
  • URP 17
  • UI Toolkit
  • Input System
  • Unity Localization
  • VContainer
  • Addressables
  • IL2CPP · ARM64
  • HLSL
  • Meshy
  • Blender
  • Python
Üretim süreci

Yapay zeka ajanlarıyla, insan denetiminde üretildi.

Son Mesai, yapay zeka ajanlarını bir ekip gibi yönettiğim üretim düzeninin canlı örneği. Mimari, zevk ve son karar bende; tekrar eden iş ajanlarda.

  1. Ajanlar için yazılmış proje

    AGENTS.md ve docs/ klasörü hikâyeyi, tasarım dilini, mimariyi ve güncel durumu anlatır. Claude Code ve Codex aynı kurallarla çalışır; her iş belgesiyle birlikte güncellenir.

  2. Editör komut satırından sürülür

    Unity CLI ile derle, Play moduna gir, ekran görüntüsü al, konsolu oku. Bir iş, çalıştığı görülmeden bitmiş sayılmaz. Bu sayfadaki görüntüler de böyle alındı.

  3. 3B modeller üretilir

    Karakterler ve eşyalar Meshy ile üretilir. Blender betikleri ölçeği, yönü, dokuyu ve ışıma maskesini ayarlar; Unity araçları materyali ve prefab'ı kurar.

  4. İçerik koddan kurulur

    Bir editör aracı prefab'ları, tanım asset'lerini, çeviri tablosunu ve sahneyi baştan üretir. Ses efektleri Python ile sentezlenir.

Yol haritası

Yapıldı

  • Üç şeritli koşu, zıplama, kayma ve artan zorluk
  • Kovalayan İK-9000 ve öğrenen engel yönetmeni
  • 3 meslek, 5 engel, 8 güçlendirme, meslek otomasyonu
  • Ofis sandalyesi, sürpriz paketler, giriş kartıyla devam, mağaza
  • Gerçek 3B modeller ve animasyonlar, kıvrımlı dünya
  • Gündüz sahnesi, ses efektleri, Türkçe ve İngilizce arayüz

Sırada

  • Müzik
  • Yeni dünyalar: otonom şehir, lojistik deposu, veri merkezi, Analog Kasaba
  • Final sürprizi: İK-9000'i işinden etmeye gelen daha yeni bir model
  • Şoför mesleği, Prompt Injection ve Fişi Çek güçlendirmeleri
  • Görevler, günlük ödül ve lider tablosu
  • iOS çıktısı ve mağaza yayını

Android test çıktısı gerçek bir cihazda (Android 16) açılıp oynandı. Oyun henüz mağazada değil.

Birlikte yapalım

Aklında bir oyun mu var?

Prototipten mağazaya, Unity ile mobil oyun geliştiriyorum. Fikrini 15 dakikada konuşalım.