T: tema · Z: kodu büyüt · S: konuşmacı notları · F: tam ekran · Esc: genel bakış · ⌂ ders haritası
OYUNLARDA YAPAY ZEKÂ · HAFTA 10
Grup Yapay Zekâsı
Formasyonlar, saldırı sırası, tim güveni, komuta zinciri — birlikte akıllı görünmek
PRESS ▶ TO START

Bu derste oyunun haritası 🗺️

  1. Neden grup YZ? — tek tek akıllı, birlikte aptal; ortaya çıkan ve merkezî koordinasyon
  2. Formasyonlar — lider, slotlar, atama, dar geçitler (Age of Empires)
  3. Saldırıları yönetmek — kung-fu çemberi ve Kingdoms of Amalur’un “Belçika YZ”si
  4. Tim koordinasyonu — Days Gone: güven ve cephe hattı
  5. Komuta zinciri ve kalabalık — Killzone 3 botları, sosyal gruplar
  6. Kod — formasyon slotları, sahne yöneticisi + üç laboratuvar
  7. Kütüphaneler — gdx-ai formasyonları, Unreal Mass/Smart Objects, Unity ECS
🎮 Bu dersin sonunda…

…bir grubu formasyonda yürütebilecek, oyuncuya aynı anda kaç düşmanın saldıracağını adil biçimde sınırlayabilecek, bir timin ne zaman saldırıp ne zaman çekileceğine karar veren bir “tim beyni” kurabilecek ve bunun zorluk ayarıyla bağlantısını kurabileceksiniz.

🤔 ISINMA: ON DÜŞMAN BİRDEN SALDIRIRSA?

Bir aksiyon oyununda on düşman sizi çevreledi. Hepsi aynı anda vursa ne olur? Hepsi aynı anda aynı siperin arkasına koşsa?

  • Oyuncu iki saniyede ölür ya da düşmanlar birbirinin içine girer: ikisi de “aptal” ya da “haksız” görünür.
  • Bireysel YZ (Y2–Y9) iyi olsa bile grup olarak kötü olabilir. Grubun ihtiyaçları: kim nerede duracak, kim saldıracak, kim yan taraftan dolaşacak, ne zaman geri çekilinecek?
  • Bu hafta: grubu yöneten küçük sistemler. Çoğu basit; etkileri büyük. Ve çoğu aslında zorluk ayarı düğmesi.

🎯 Bu konu için bilmeniz gerekenler

Yeşil = gerekli · kesikli = faydalı ama şart değil. Tıklayınca ilgili sunuma gider.

Neden?Formasyon üyeleri birer steering ajanıdır (arrive + ayrılma). Tim kararları ise bir davranış ağacına “rol” olarak eklenir. Bunları bilmek yeter.
🧰 Kodlamadan korkuyorsanızBu sunumdaki sistemlerin çoğu birkaç sayı ve basit kuraldan oluşur: “ızgara kapasitesi 12, asker 4, trol 8”. Tasarımcı olarak bu sayıları ayarlamak, kod yazmaktan daha büyük etki yaratır.

Mini sözlük

formation · slot · leaderformasyon · yuva · liderGrubun şekli · her üyenin şekildeki yeri · şeklin referans noktası
slot assignmentyuva atamasıHangi üyenin hangi yuvaya gideceği
kung-fu circlekung-fu çemberiDüşmanların oyuncuya sırayla (tek tek) saldırması
attack token / capacitysaldırı jetonu / kapasitesiAynı anda yapılabilecek saldırı miktarını sınırlayan “bilet” sistemi
stage managersahne yöneticisiSaldırı izinlerini dağıtan merkezî YZ (Amalur)
squad · roletim · rolKendisi de bir YZ olan grup · grubun üyeye verdiği görev (bastırma, kanat)
confidence · frontlinegüven · cephe hattı“Kazanıyor muyuz?” ölçüsü · iki tarafı ayıran çizgi (Days Gone)
command hierarchykomuta zinciriKomutan → tim → birey katmanları (Killzone 3)
emergent coordinationortaya çıkan koordinasyonKimse plan yapmadan basit kurallardan doğan grup davranışı
LEVEL 0
Neden grup YZ?
ortaya çıkan mı, merkezî mi?
  • neden grup YZ?
  • formasyonlar
  • saldırıları yönetmek
  • tim koordinasyonu
  • komuta zinciri ve kalabalık
  • kod ve laboratuvarlar
  • kütüphaneler ve entegrasyon

Grup davranışının türleri

Mars & Chanut (Game AI Pro 2, 20. bölüm) grup hareketini üçe ayırır:

  • Sürüler (flocks): sabit düzen yok, yerel kurallar (Y7 boids).
  • Formasyonlar: belirli bir şekil, her üyenin yeri belli (asker birlikleri, RTS).
  • Küçük sosyal gruplar: arkadaşlarıyla yürüyen insanlar, rehberinin şemsiyesini izleyen turistler.

Bunlara savaş koordinasyonu eklenir: kim saldırır, kim siper alır, kim kanattan dolanır, ne zaman çekilinir?

ortaya çıkanmerkezî
Nasıl?Her ajan yerel kurallar + paylaşılan bilgiBir “grup beyni” karar verir, üyelere rol dağıtır
ÖrnekBoids; F.E.A.R.’ın kanat “yanılsaması” (Y5)Days Gone timleri, Killzone 3 komutanı, Amalur sahne yöneticisi
ArtıBasit, ölçeklenir, sağlamKontrol edilebilir, “planlı” görünür
EksiNe olacağı tam bilinmezTek hata noktası, karmaşık

Gerçek oyunlar ikisini karıştırır: grup “ne yapılacağına” karar verir, bireyler “nasıl”ını kendileri halleder ve daha önemli bir şey olursa (el bombası!) grubun emrini dinlemez.

LEVEL 1
Formasyonlar
lider, yuvalar, atama
  • neden grup YZ?
  • formasyonlar
  • saldırıları yönetmek
  • tim koordinasyonu
  • komuta zinciri ve kalabalık
  • kod ve laboratuvarlar
  • kütüphaneler ve entegrasyon

Önce günlük hayattan: bando 🥁

şef doğuya yürüyorAliEceCanSu🥁şef sola döndü (kuzey)AliEceCanSu🥁

Bandoda kimseye “sahanın şu noktasına git” denmez. Herkese şefe göre bir yer verilir: “Ali, şefin bir adım arkası, bir adım solu.”

  • Şef yürüdükçe herkesin hedefi de yürür.
  • Şef dönünce “arka” ve “sol” da döner: Ali’nin sahadaki yeri değişir ama tarifi değişmez.
  • Herkes kendi yerine kendi ayağıyla yürür; biri geride kalırsa şef biraz yavaşlar.

Oyundaki formasyon aynıdır: lider (şef), her üyenin liderin yerel çerçevesinde bir yuvası (tarifi) ve yuvasına kendisi giden üyeler.

Formasyonun anatomisi

  • Bir lider (gerçek bir birim ya da görünmez bir “çapa” noktası) yolu izler (Y8–Y9).
  • Her üyenin liderin yerel çerçevesinde bir yuvası var: “2 m arkada, 1 m sağda”. Lider dönünce yuvalar da döner (Y0’daki döndürme).
  • Üyeler yuvalarına arrive ile gider, birbirinden ayrılma ile uzak durur (Y7).
  • Formasyon hızı = en yavaş üyenin hızı: lider, geride kalanları bekler.
📜 Age of Empires (Dave Pottinger, 1999)“Koordineli Birim Hareketi” yazısında üç tür varlık ayırır: tek birim, grup (sıkışınca şeklini değiştirebilir) ve formasyon (bir önü, arkası ve iki kanadı var; her birim kendine özgü göreli konumunu korur; formasyonun boşluklarına başka birim giremez). Formasyon engelin etrafından yol bulamazsa öbür tarafta bozulup yeniden kurulabilir.
ileri (x) sağ (y) lider (−50, −50)(−50, +50)(−100, −100)(−100, +100)(−150, −150) kama: i. yuva → (−r·s, ±r·s), r = ⌈(i+1)/2⌉

Canlı: formasyon 🪖

  1. Liderin arkasına tıklayın: lider döner, yuvalar da döner. Sabit sıra atamasında üyeler birbirinin içinden geçerek eski yuvalarına koşar (çizgiler çaprazlanır). En yakın atamada sorun büyük ölçüde kayboluyor.
  2. “Lider bekler”i kapatın: lider hızlıca gidiyor, formasyon dağılıyor. Formasyon hızı neden en yavaş üyeye eşit olmalı?
  3. “Dar geçitli duvar”ı açın ve geçidin öbür tarafına tıklayın: geçide yaklaşınca formasyon sütuna dönüşüyor, geçince eski şekline. Pottinger’ın “bozul ve yeniden kur” fikri.
  4. Çember formasyonu + 16 üye: koruma çemberi (VIP eskortu). Kama + 3 üye: keşif timi.
🔎 DEMODA DENEYİN
  1. Liderin arkasına tıklayın: lider döner, yuvalar da döner. Sabit sıra atamasında üyeler birbirinin içinden geçerek eski yuvalarına koşar (çizgiler çaprazlanır). En yakın atamada sorun büyük ölçüde kayboluyor.
  2. “Lider bekler”i kapatın: lider hızlıca gidiyor, formasyon dağılıyor. Formasyon hızı neden en yavaş üyeye eşit olmalı?
  3. “Dar geçitli duvar”ı açın ve geçidin öbür tarafına tıklayın: geçide yaklaşınca formasyon sütuna dönüşüyor, geçince eski şekline. Pottinger’ın “bozul ve yeniden kur” fikri.
  4. Çember formasyonu + 16 üye: koruma çemberi (VIP eskortu). Kama + 3 üye: keşif timi.

🔗 Başka gözle: etkileşimli anlatımlar ve yazılar

Aynı konuyu başka bir anlatımla, kendi elinizle oynayarak görmek çok işe yarar. Kartlar yeni sekmede açılır; çoğu İngilizce ama görsel ve etkileşimli.

Çizimle: hangi asker hangi yuvaya?

sırayla: A→1, B→2, C→3ABC123en kısa toplam yol: kesişme yokABC123

Üç asker (A, B, C) formasyonun üç boş yuvasına (1, 2, 3) gidecek. Yuvaları sırayla dağıtırsak (solda) A ile C’nin yolları çaprazlanır: birbirine çarpar, oyuncu “salak askerler” der.

Sağda her asker en yakın yuvaya gitti: toplam yol kısaldı, yollar kesişmiyor. Doğru çözüm “toplam yürüme en az” eşleştirmesidir (Macar algoritması); oyunlarda çoğu zaman bu açgözlü “en yakın boş yuva” kuralı yeter.

Formasyonun zor kısımları

Yuva atamasıDoğru çözüm, toplam yürüme mesafesini en aza indiren eşleştirmedir (atama problemi; Macar algoritması). Pratikte açgözlü “en yakın boş yuva” ve yön değişince sırayı ayna gibi çevirmek yeterlidir. Ölen üyenin yuvası boşalınca kim doldurur? Kurallar gerekir.
Ölçeklenen formasyonlarÜye sayısına göre şeklini değiştiren formasyonlar: 4 kişiyle elmas, 12 kişiyle iki sıra, 30 kişiyle blok. Ayrıca araziye göre: açıkta geniş, ormanda dar.
Dönüş ve “tekerlek” hareketiBir blok asker anında dönemez; dış uçtakiler daha hızlı yürümelidir. Stephen Bjore (Game AI Pro, 21. bölüm), Company of Heroes ekibinden Chris Jurney’in GDC 2007 sunumundaki dönüş çemberleri fikrini genişleterek formasyonun hedefe istenen yönde varması için yol üretir.
⚠️ Kalabalık ve formasyonİki formasyon karşılaşınca ne olur? Formasyonun bütün olarak bir “büyük ajan” gibi kaçınması, sonra üyelerin yerel kaçınması: iki seviyeli kaçınma (Mars & Chanut).
Quiz 1 · formasyon
Lider hızla yürüyor ve formasyondaki ağır zırhlı bir üye sürekli geride kalıyor. En basit doğru çözüm?
Formasyonun hızı en yavaş üyesinin hızıdır. Lider, üyelerin yuvalarından ne kadar saptığına bakıp yavaşlarsa formasyon bütün kalır (demodaki “lider bekler”). Işınlamak görsel olarak bozuk görünür; aralığı büyütmek sorunu çözmez.
LEVEL 2
Saldırıları yönetmek
kung-fu çemberi ve Belçika YZ’si
  • neden grup YZ?
  • formasyonlar
  • saldırıları yönetmek
  • tim koordinasyonu
  • komuta zinciri ve kalabalık
  • kod ve laboratuvarlar
  • kütüphaneler ve entegrasyon

Çizimle: on düşman, iki bilet 🎟️

🧍oyuncu👹🎟️👹🎟️👹👹👹👹👹👹👹👹İç halka: saldıranlarYalnızca bileti 🎟️ olan 2 düşman yaklaşıp vurur.Dış halka: bekleyenlerÖbür 8 düşman uzakta dolanır, bağırır, poz verir;oyuncuya baskı hissi verir ama vurmaz.Bilet el değiştirirSaldıran vurup geri çekilince bileti bırakır;sıradaki bekleyen alır ve iç halkaya girer.Zorluk ayarı: bilet sayısı (kolay 1, zor 3).

Kung-fu çemberi

Dövüş filmlerinin klasik sahnesi: kahramanı onlarca kişi çevirir ama sırayla, birer birer saldırırlar. Oyunlarda da çok yaygın bir teknik: düşmanlar oyuncunun etrafında bir çemberde bekler, bir “saldırı jetonu” alan saldırır, jetonu geri verince sıradaki gelir.

  • Artı: oyuncu bunalmaz, her düşmana odaklanabilir, yazması çok kolay.
  • Eksi: hızlı akan bir dövüşte yapay görünür; alan saldırıları anlamsızlaşır; zayıf bir askerle dev bir trol aynı “tek jeton”u kullanır.
Jeton sistemleri her yerdeAynı fikir başka şeyler için de kullanılır: “aynı anda en fazla bir el bombası”, “en fazla iki keskin nişancı oyuncuya nişan alsın”, “bir seferde bir düşman bağırsın”. Kaynak: oyuncunun dikkati. Jetonları oyuncu üzerinde tutmak, bütün düşmanlar arasında adil paylaştırır.

Derin hikâye: Kingdoms of Amalur’un “Belçika YZ”si 🧇

Michael Dawe (Game AI Pro, 28. bölüm): Reckoning, geleneksel bir RPG içinde “gerçek” bir aksiyon oyunu olmak istiyordu; çok sayıda düşman aynı anda. Kung-fu çemberi fazla katıydı. Ekip, çizimleri waffle’a benzediği için içeride “Belçika YZ” denen bir sistem kurdu:

  • Oyuncunun etrafında 8 yuvalı bir ızgara (XOX tahtası gibi) ve bir ızgara kapasitesi var. Her düşman türünün bir ağırlığı var.
  • Örnek: kapasite 12. Asker (ağırlık 4) izin ister → verilir, kalan 8. Trol (ağırlık 8) → verilir, kalan 0. İkinci asker → reddedilir, dışarıda bekler.
  • Ayrıca bir saldırı kapasitesi (örnekte 10) ve her saldırının ağırlığı: trolün hücumu 6, sopası 4; askerin hamlesi 5, kılıcı 3. Trol hücumu seçer (kalan 4), asker artık sadece kılıç vurabilir.
  • Kararları bireyler değil, merkezî bir sahne yöneticisi (stage manager) verir. Yuvalar aslında oyuncudan eşit uzaklıkta iç (saldırı) ve dış (yaklaşma) çemberlerdir.
💡 Zorluk = kapasiteKolay modda kapasiteler küçük, zor modda büyük. Aynı karşılaşma, kod değişmeden farklı zorluklarda oynanır. Tasarımcılar her karşılaşmayı farklı yaratıklarla kurarken hep aynı kurallar geçerlidir.
Neden ağırlık?“Aynı anda en fazla 2 düşman” kuralı, iki askerle iki trolü aynı sayar. Ağırlık, düşmanın tehdidini ölçer: oyuncunun kaldırabileceği toplam tehdit sınırlanır.

Canlı: saldırı izinleri ⚔️

  1. “Yönetim yok”: herkes içeri dalıyor. Dakikadaki hasara bakın. Sonra “kung-fu çemberi”: tek tek; hasar çok düşük ve sahne yavaş.
  2. “Belçika YZ”: ızgara 12. Aynı anda içeride kim var? Trol içerideyken ikinci asker neden bekliyor?
  3. Saldırı kapasitesini 4’e indirin: trol hücum (6) yapamıyor, sopaya (4) mecbur. Kapasite = zorluk düğmesi.
  4. Izgara kapasitesini 24’e çıkarın: zor mod. Hasar/dakika ne kadar arttı?
🔎 DEMODA DENEYİN
  1. “Yönetim yok”: herkes içeri dalıyor. Dakikadaki hasara bakın. Sonra “kung-fu çemberi”: tek tek; hasar çok düşük ve sahne yavaş.
  2. “Belçika YZ”: ızgara 12. Aynı anda içeride kim var? Trol içerideyken ikinci asker neden bekliyor?
  3. Saldırı kapasitesini 4’e indirin: trol hücum (6) yapamıyor, sopaya (4) mecbur. Kapasite = zorluk düğmesi.
  4. Izgara kapasitesini 24’e çıkarın: zor mod. Hasar/dakika ne kadar arttı?
Quiz 2 · saldırı
Izgara kapasitesi 12. Sırayla istek gelir: trol (8), asker (4), asker (4). Kimler izin alır?
Trol 8 → kalan 4. İlk asker 4 → kalan 0. İkinci asker sığmaz, bekler. Sıra önemlidir: önce iki asker gelseydi (kalan 4), trol (8) sığmazdı. Gerçek sistemlerde bekleme süresi ve yakınlık gibi ölçütlerle sıra adil tutulur.
LEVEL 3
Tim koordinasyonu
Days Gone: güven ve cephe hattı
  • neden grup YZ?
  • formasyonlar
  • saldırıları yönetmek
  • tim koordinasyonu
  • komuta zinciri ve kalabalık
  • kod ve laboratuvarlar
  • kütüphaneler ve entegrasyon

Derin hikâye: Days Gone (2019) timleri

Tobias Karlsson (Sony Bend, Game AI Pro Online 2021, 12. bölüm): açık dünyada düşman her yönden gelebilir; doğrusal bir seviyedeki gibi senaryo yazılamaz. Çözüm iki basit fikir: güven ve cephe hattı.

  • Timler birer YZ varlığıdır: ne yapılacağına, hangi üyenin hangi rolü alacağına ve rolün genel olarak nerede yapılacağına karar verir. Her uygun düşman bir time atanır (tek kişilik tim bile).
  • Rol, bireyin davranış hiyerarşisine önceden belirlenmiş bir noktada takılan bir alt davranıştır. Daha öncelikli bir şey olursa (el bombasından kaç) birey rolü bırakır. Yeni rol eklemek mevcut davranışları değiştirmeyi gerektirmez (Y3: BT’nin gücü).
  • Güven: “tarafımız bu karşılaşmayı kazanıyor mu?” Algılanan dost ve düşman gücünün oranından hesaplanır; beş seviye: panik, endişeli, nötr, kendinden emin, kahraman. Timin güveni üyelerinin ortalaması.
  • Güvene göre tim dört durumdan birindedir: dizil (cephe hattının gerisinde yerini al), çatış (nötr), geri çekil (endişeli ve altı), bastır (kendinden emin ve üstü).
Cephe hattıÇatışmanın yönü (tim merkezinden düşman merkezine), tim üyelerinin düşmana en fazla ne kadar yaklaşabileceğini gösteren bir çizgi, genişliği, önünde bir tarafsız bölge ve düşmanın kontrol ettiği alan. Bütün konum sorularının cevabı bu basit yapıdan çıkar: kim nerede durur, kim kanattan dolanır.
🎬 İzleyinSquad Coordination in ‘Days Gone’ (Tobias Karlsson, GDC AI Summit)

Canlı: güven ve cephe hattı

Mavi tim sizin kontrolünüzde değil; düşman ve müttefik ekleyip çıkararak güveni değiştirin. Güç oranı düşünce cephe hattı geri çekilir (geri çekil), yükselince ileri itilir (baskı yap). Turuncu bant: tarafsız bölge; kırmızı: düşman alanı. (Güven eşikleri bizim seçimimiz; Days Gone’un gerçek değerleri yayımlanmadı.)

🎬 Ara: Days Gone’un timleri nasıl koordine oluyor?

Squad Coordination in ‘Days Gone’
GDC, Tobias Karlsson (Bend Studio) · YouTube’da aç

Az önceki demodaki “güven” ve “cephe hattı” fikirlerinin geliştiricisinden anlatımı: timin üyeleri birbirine nasıl haber veriyor, kim önden gidiyor, kim kuşatıyor.

🤔 İzlerkenKonuşmanın ilk 15 dakikası yeter. Tim üyelerinin paylaştığı bilgi neler? Bir üye oyuncuyu görünce öbürleri ne öğreniyor, neyi öğrenmiyor? Bu, Y11’deki algı sisteminin hangi kısmına benziyor?

Roller ve paylaşılan bilgi

Tipik roller
  • Bastırma (suppressor): düşmanı siperine çivilemek için sürekli ateş
  • Kanat (flanker): yandan dolanıp siperi işe yaramaz hâle getirmek
  • İlerleyen: siperden sipere, diğerleri örterken
  • Koruyucu: bir VIP’in ya da nesnenin yakınında kal

Rol seçimi utility (Y4) ile yapılabilir: “bu rol için en uygun üye kim?” (mesafe, silah, can).

Paylaşılan kara tahtaTimin ortak hafızası (Y3): son görülen düşman konumu, kim hangi siperde, kim kanatta. F.E.A.R. bunu basit tim davranışlarıyla (siper al, ilerle, sıralı ilerle, ara) ve emirlerle yaptı; üyeler emri kendi hedefleriyle tartıyordu (Y5).
Oyuncuya anlatın!“Yandan dolaşıyorum!”, “Ön tarafı örtün!” (Y1’de F.E.A.R.’ın diyalogları). Koordinasyon ancak oyuncu fark ederse vardır. Grup YZ’sinin yarısı sesli ve görsel geri bildirimdir.
Quiz 3 · tim
Days Gone’da bir tim üyesinin rolü “kanattan dolan”. Tam o sırada yanına bir el bombası düşüyor. Ne olmalı?
Roller bireyin davranış ağacına belli bir öncelik noktasında takılır; daha öncelikli davranışlar doğal olarak önce gelir. Bu, grup kararı ile bireysel hayatta kalma arasındaki dengeyi kurar ve her rol için “el bombası kontrolü” yazmayı gereksiz kılar.
LEVEL 4
Komuta zinciri ve kalabalık
Killzone 3 botları, sosyal gruplar
  • neden grup YZ?
  • formasyonlar
  • saldırıları yönetmek
  • tim koordinasyonu
  • komuta zinciri ve kalabalık
  • kod ve laboratuvarlar
  • kütüphaneler ve entegrasyon

Killzone 3 (2011): komutan → tim → birey

Komutan Tim A Tim B botbotbotbotbotbot emirler aşağı, bilgi yukarı
  • Guerrilla’nın çok oyunculu botları (Straatman, Verweij vd., Game AI Pro, 29. bölüm) strateji oyunlarından esinlenen hiyerarşik komuta zinciri kullanır.
  • Strateji katmanı (komutan): oyun modunu oynar, timlere hedef verir: alana saldır, alanı savun, oyuncuya eşlik et, toplanma noktasına ilerle.
  • Tim katmanı: hedefi üyeler için emirlere çevirir; başarı/başarısızlığı komutana bildirir.
  • Birey katmanı: botun kendi HTN planlayıcısı (Y5) emirleri izler, ama kendi hayatta kalma kararlarını verir.
  • Konum seçimi için etki haritaları ve taktik konum sorguları (Y12).

Kalabalıklar ve sosyal gruplar

Sosyal gruplarGerçek insanların çoğu kalabalıkta yalnız değil, 2–4 kişilik gruplar hâlinde yürür. Gruplar yan yana (dar yerde V ya da tek sıra) yürür, yavaş üyeyi bekler, birbirine bakar. Mars & Chanut’un örneği: Mont Saint-Michel’de rehberinin şemsiyesini izleyen turist grubu. Bu küçük ayrıntılar açık dünyaları “canlı” gösterir.
Binlerce varlıkŞehir kalabalıkları ve trafik için bireysel BT’ler pahalıdır. Veri odaklı sistemler (Unreal Mass, Unity ECS) binlerce varlığı basit kurallarla yürütür; oyuncuya yakın olanlara daha zengin YZ, uzaktakilere ucuz YZ verilir (Y18: ayrıntı düzeyi / LOD).

Grup navigasyonu boru hattı (Mars & Chanut): grup bir bütün olarak yol bulur ve büyük engellerden kaçar → grup içindeki üyeler kendi yuvalarına/komşularına göre yürür → üyeler yerel çarpışmalardan kaçar.

LEVEL 5
Kod ve laboratuvarlar
yuvalar ve sahne yöneticisi
  • neden grup YZ?
  • formasyonlar
  • saldırıları yönetmek
  • tim koordinasyonu
  • komuta zinciri ve kalabalık
  • kod ve laboratuvarlar
  • kütüphaneler ve entegrasyon

🎒 Ön bilgi: yerel çerçeveden dünyaya

Yuva ofseti liderin yerel çerçevesinde verilir: (ileri, sağ). Dünya koordinatına çevirmek için liderin yön açısı θ kadar döndürüp lider konumuna ekleriz (Y0’daki döndürme):

$$\text{dünya} = \text{lider} + \begin{pmatrix}\cos\theta & -\sin\theta\\ \sin\theta & \cos\theta\end{pmatrix}\begin{pmatrix}\text{ileri}\\ \text{sağ}\end{pmatrix}$$

Unity bunu sizin için yapar: leader.TransformPoint(offset) ya da leader.position + leader.rotation * offset.

Neden yerel?Formasyonu bir kez tanımlarsınız (“kama”), lider hangi yöne dönerse dönsün doğru kalır. Ofsetler bir ScriptableObject/JSON dosyasında tasarımcı tarafından düzenlenebilir.

Formasyon yuvaları ve üye hareketi

Sahne yöneticisi: saldırı izinleri (1/2)

Sahne yöneticisi: saldırı izinleri (2/2)

🎒 Kod sözlüğü

leader.TransformPoint(v)yerel → dünyaLiderin konumu, dönüşü ve ölçeğiyle v’yi dünya koordinatına çevirir
(i + 2) / 2 (tam sayı bölmesi)tam sayı bölmeC#’ta int / int küsuratı atar: 1,1,2,2,3…
Mathf.InverseLerp(a, b, x)ters lerpx’in a–b aralığının neresinde olduğu (0–1); Y0
Queue · Enqueue · Dequeuekuyrukİlk gelen ilk çıkar: adil bekleme sırası
math.ceilyukarı yuvarlama⌈1,5⌉ = 2
max(fits, key=…)ölçüte göre en büyükSığan saldırılardan ağırlığı en büyük olan

🌱 Isınma kodu: bu düşman içeri girebilir mi?

Kingdoms of Amalur’un “Belçika YZ”sinin kalbi tek bir karşılaştırma. Şu an herkes içeri dalıyor (“yönetim yok” modu). Kapasite 12 iken: trol (8) girer, sonra asker (4) girer, ikinci asker bekler. Zorluk seviyesi = capacity sayısı.

🌱 Isınma kodu: yuvam dünyada nerede?

Formasyonu bir kez yerel çerçevede tanımlarsınız (“30 geride, 20 sağda”); lider nereye dönerse dönsün bu fonksiyon yuvanın dünyadaki yerini verir. p5.js’te forward = p5.Vector.fromAngle(heading), right = createVector(-forward.y, forward.x).

🧪 Canlı laboratuvar: kama formasyonu

Başlangıç kodu üyeleri tek sıra (sütun) dizer. Kamaya çevirin: sıra numarası r = Math.ceil((i + 1) / 2). Sonra fareyi gezdirin: lider dönünce kama da dönmeli. Bonus: kendi formasyonunuzu tasarlayın (testi bozar ama eğlencelidir).

🐍 Laboratuvar: Belçika YZ izinleri

Sığmayan isteği atlayın ama durmayın: sonraki küçük istek yine sığabilir (testte var). Boş istek listesi de test ediliyor.

🐍 Laboratuvar: tim güveni

Days Gone’un beş seviyesi (eşikler bizim seçimimiz). Müttefik listesi boşsa oran 0 → “panicked”. Sonra düşünün: güveni oyuncuya nasıl gösterirdiniz? (Ses, animasyon, diyalog.)
LEVEL 6
Kütüphaneler ve entegrasyon
motorlar ve oyununuz
  • neden grup YZ?
  • formasyonlar
  • saldırıları yönetmek
  • tim koordinasyonu
  • komuta zinciri ve kalabalık
  • kod ve laboratuvarlar
  • kütüphaneler ve entegrasyon

🧰 Kütüphaneler ve araçlar

adplatformne yapar / sınırlarınasıl eklenir
gdx-ai FormationJava (libGDX) · açık kaynakHazır formasyon sistemi: desenler, yuva atama stratejileri (serbest, sabit, göreli), formasyon hareket düzenleyicisi. Kod okumak için de çok iyi.Gradle bağımlılığı
Unreal Mass + Smart ObjectsUnreal 5 · yerleşikMass: binlerce varlıklı kalabalık/trafik; Smart Objects: “bu bankta iki kişi oturabilir” gibi rezervasyonlu etkileşimler (bir tür jeton sistemi).Plugins → MassEntity, MassAI, SmartObjects
Unreal EQS + StateTreeUnreal · yerleşikTim üyelerine konum seçmek (EQS, Y12) ve tim/rol durumlarını yönetmek (StateTree).Yerleşik
Unity Entities (ECS)Unity · resmî paketBinlerce birimli sürü ve kalabalıklar için veri odaklı yapı; Jobs + Burst ile.Package Manager → Entities
A* Pathfinding Project (RVO)Unity · ProGrup halinde yürüyen birimler için yerel kaçınma ve “aynı hedefe giden birimleri dağıtma”.Asset Store
Kendi sisteminizher motorFormasyonlar ve jeton/kapasite sistemleri genelde oyuna özel ve küçüktür (bu sunumdaki 30–40 satır). Motorların hazır “grup YZ” aracı yok denecek kadar azdır.—

🧩 Oyununuza grup YZ’si eklerken

  1. Önce saldırı yönetimi: en ucuz ve en etkili adım. Basit bir jeton/kapasite sistemi, oyunun “adil” hissini hemen değiştirir.
  2. Grup = YZ varlığı: tim nesnesi yaratın; üyeleri listeler, rol dağıtır, ortak kara tahtayı tutar. Üyelerin BT’sine rol düğümleri ekleyin.
  3. Konumlar: rollerin nerede yapılacağını basit bir yapıdan (cephe hattı, saldırı çemberi) türetin; ayrıntıyı konum sorgusu (Y12) ile seçin.
  4. Geri bildirim: rol değişince bağırma/işaret animasyonu.
  5. Zorluk: kapasiteler, güven eşikleri, kanat dolanma sıklığı.
Sık hatalar
  • Jetonu alıp ölen düşmanın jetonu geri vermemesi (kapasite sızıntısı)
  • Herkesin aynı siperi seçmesi (rezervasyon yok)
  • Bekleyen düşmanların “aptalca” durması: bekleme çemberinde yavaşça yer değiştirsinler, tehdit etsinler
  • Grup kararını her karede yeniden vermek: titreme (Y2, Y4)
⚙️ PerformansGrup kararları saniyede birkaç kez yeter; bireysel hareket her kare. Grup sayısı az, birey sayısı çok: maliyetin çoğu bireyde.

🤖 Bu konuyu bir YZ kod asistanıyla yazarken

Sık yapılan hatalar — kontrol edin
  • Ölen/devre dışı kalan birimin jetonunu bırakmamak
  • Formasyon ofsetini dünya koordinatında yazmak (lider dönünce bozulur)
  • Bütün düşmanları tek bir dev betikte yönetmek (her şey merkezî = her şey kırılgan)
  • Grup kararını bireyin acil durum tepkilerinin üstüne koymak
  • Kapasite/eşikleri koda gömmek; tasarımcının ayarlayamaması
İyi bir istek (prompt) örneği

“Unity 6, C#. Bir aksiyon oyununda düşman saldırılarını yöneten StageManager yaz: oyuncunun gridCapacity ve attackCapacity değerleri ScriptableObject’ten (zorluk seviyesine göre) gelsin; düşman türlerinin gridWeight’i ve saldırılarının weight’leri olsun. İstekler adil bir kuyrukta beklesin; ölen, sersemleyen ya da 15 m’den uzaklaşan düşman jetonunu otomatik bıraksın. Bekleyen düşmanlar 8 m’lik çemberde yavaşça dolaşsın, izin alan 2.5 m’ye yaklaşsın. Debug için Gizmos ile çemberleri ve jeton sahiplerini çiz.”

  • Grubun kararlarını (roller, durumlar, eşikler) siz tasarlayın; asistan bağlantı kodunu yazsın
  • Jeton geri verme kurallarını (ölüm, sersemleme, menzilden çıkma) açıkça listeleyin
  • Rolün bireyin BT’sinde hangi öncelikte duracağını söyleyin
  • Debug görselleştirmesi: kimde jeton var, cephe hattı, roller

🔬 Araştırma ucu: öğrenen takımlar

OpenAI Five (2019)Dota 2’de beş ajanlık bir takım, kendine karşı oynayarak (pekiştirmeli öğrenme) dünya şampiyonu takımı yendi. Koordinasyon elle yazılmadı; ortak ödülden “öğrenildi”. Bedeli: aylarca binlerce işlemcide eğitim.
AlphaStar (2019)StarCraft II’de büyükusta seviyesi (Nature). Birim gruplarını yöneten tek bir sinir ağı; çok ajanlı bir “lig” ile eğitildi. Oyun YZ’si için çok pahalı ama ilham verici.
Saklambaçta ortaya çıkan alet kullanımıOpenAI (2019): saklananlar ve arayanlar takımları, kimse öğretmeden kutularla barikat kurmayı, rampayı “kilitlemeyi” öğrendi. Basit kurallardan ortaya çıkan grup davranışının öğrenme versiyonu (Y13).

💬 Tartışma soruları

Yanınızdakiyle 2 dakika konuşun, sonra sınıfça tartışalım
  1. Dövüş filmlerinde kötü adamlar kahramana sırayla saldırır. Oyunlarda bunu fark ettiğiniz bir an oldu mu (Batman: Arkham, Assassin’s Creed, God of War…)? Sizi rahatsız etti mi, yoksa “havalı” mı hissettirdi?
  2. Zor modda düşmanları daha akıllı yapmak yerine sadece “aynı anda saldırabilen düşman kapasitesini” artırmak hile mi? Oyuncu farkı nasıl hisseder?
  3. Bir tim “geri çekil” kararı verdi ama bir üyesi tam o an oyuncuyu vurma fırsatı yakaladı. Emre mi uymalı, fırsatı mı değerlendirmeli? Bu kararı kim vermeli: tim mi, birey mi?
  4. Bir şehirde yürüyen 500 NPC’nin her birine davranış ağacı vermek pahalı. Oyuncu hangisinin “gerçekten düşündüğünü” nasıl anlar? Buna göre hangilerine ucuz YZ verirdiniz?

🚀 Proje ve araştırma önerileri

  1. [kolay] Kung-fu arena — p5.js’te 8 düşmanlı arena: üç saldırı yönetimi modu (yok, tek tek, kapasite) arasında geçiş; oyuncu testleriyle hangisinin eğlenceli olduğunu ölçün.
  2. [kolay] Formasyon editörü — Fareyle yuva yerleştirip formasyonu JSON olarak kaydeden küçük bir araç; Unity’de yükleyin.
  3. [orta] Eskort görevi — Bir VIP’i çember formasyonda koruyan 6 muhafız; saldırı gelince ikisi saldırgana yönelir (rol), diğerleri çemberi korur.
  4. [orta] Güven sistemi — Days Gone tarzı: güven seviyeleri + cephe hattı + dört tim durumu; düşman sayısını değiştirerek davranışı test edin.
  5. [zor] Komuta zinciri — Bayrak kapmaca: komutan iki time hedef verir (saldır/savun), timler üyelere rol dağıtır, bireyler BT ile yürütür.
  6. [araştırma] Öğrenen kanat — ML-Agents ile iki ajanın “biri bastırır, biri dolanır” davranışını ortak ödülle öğrenip öğrenemediğini deneyin; elle yazılmış rol sistemiyle karşılaştırın.

Neler öğrendik? 🎒

  • Grup hareketi: sürü, formasyon, sosyal grup; koordinasyon: ortaya çıkan vs merkezî.
  • Formasyon: lider çerçevesinde yuvalar, atama, hız = en yavaş üye, dar geçitte bozul/yeniden kur (Age of Empires).
  • Saldırı yönetimi: kung-fu çemberi; Belçika YZ (ızgara/saldırı kapasitesi, ağırlıklar, sahne yöneticisi) = zorluk düğmesi.
  • Tim: Days Gone — timler YZ varlığı, roller BT’ye takılır, güven beş seviye, cephe hattı, dört durum.
  • Komuta zinciri: Killzone 3 — komutan → tim → birey.
  • Kalabalık: sosyal gruplar, Mass/ECS, LOD.
  • Sonraki bölüm: algı ve taktik — önce “ne görüyor, ne duyuyor?”.

🎮 Bu sunumdaki oyunlar (1/2)

Adı geçen oyunu tanımıyorsanız: oyuncuların kullandığı wiki sayfası ve oyunu kısaca gösteren bir video. ▶ video slaydın üstünde açılır (Esc ile kapanır); 🎯 işaretli bağlantılar doğrudan bu sunumdaki konuya gider.

Age of Empires 1997 · gerçek zamanlı strateji
Tarihî uygarlıklarla ordu kurup savaşılan klasik strateji serisi.
Kingdoms of Amalur: Reckoning 2012 · aksiyon RPG
Açık dünyalı fantastik rol yapma oyunu; düşman grupları davranış ağacıyla saldırı sırası alır.
Days Gone 2019 · açık dünya aksiyon
Salgın sonrası Oregon’da motosikletli bir avcı; yüzlerce zombilik dev sürüleriyle ünlü.
Killzone 2 / 3 2009 / 2011 · nişancı
PlayStation 3’ün askerî bilimkurgu nişancıları; çok oyunculu botları HTN planlayıcıyla düşünür.
F.E.A.R. 2005 · nişancı
Paranormal olayları araştıran özel tim; düşman askerleri yıllarca “en akıllı düşmanlar” listelerinde anıldı.

🎮 Bu sunumdaki oyunlar (2/2)

Adı geçen oyunu tanımıyorsanız: oyuncuların kullandığı wiki sayfası ve oyunu kısaca gösteren bir video. ▶ video slaydın üstünde açılır (Esc ile kapanır); 🎯 işaretli bağlantılar doğrudan bu sunumdaki konuya gider.

Company of Heroes 2006 · gerçek zamanlı strateji
İkinci Dünya Savaşı’nda manga düzeyinde strateji; siper ve görüş hattı çok önemli.
Dota 2 2013 · MOBA
5’e 5 takım strateji oyunu; kritik vuruş gibi şans olaylarında sözde rastgele dağılım kullanır.
StarCraft 1998 / 2010 · gerçek zamanlı strateji
Üç ırkın savaştığı, e-sporu başlatan strateji serisi; StarCraft II, DeepMind’ın AlphaStar’ının sahnesi oldu.
Assassin’s Creed 2007– · aksiyon-macera
Tarihî şehirlerde çatılarda koşan suikastçı serisi; kalabalığın içinde saklanmak temel mekanik.
God of War 2018 · aksiyon-macera
Kratos ve oğlu Atreus’un İskandinav yolculuğu; oyun baştan sona tek kesintisiz kamera çekimiyle akar.

Kaynaklar: videolar 🎬

📄 Akademik okumalar

Dawe 2013 · Beyond the Kung-Fu Circle: A Flexible System for Managing NPC Attacks (Game AI Pro, Bölüm 28)
Kingdoms of Amalur’un Belçika YZ’si.
Karlsson 2021 · Squad Coordination in Days Gone (Game AI Pro Online, Bölüm 12)
Güven ve cephe hattı.
Straatman, Verweij vd. 2013 · Hierarchical AI for Multiplayer Bots in Killzone 3 (Game AI Pro, Bölüm 29)
Komutan → tim → birey.
Mars & Chanut 2015 · Hierarchical Architecture for Group Navigation Behaviors (Game AI Pro 2, Bölüm 20)
Sürü, formasyon, sosyal grup.
Bjore 2013 · Techniques for Formation Movement Using Steering Circles (Game AI Pro, Bölüm 21)
Formasyonun istenen yönde varması.
Pottinger 1999 · Coordinated Unit Movement / Implementing Coordinated Movement (Game Developer (Age of Empires))
RTS’de grup ve formasyon hareketi.
Berner vd. (OpenAI) 2019 · Dota 2 with Large Scale Deep Reinforcement Learning (arXiv 1912.06680)
OpenAI Five.
Baker vd. 2019 · Emergent Tool Use From Multi-Agent Autocurricula (arXiv 1909.07528)
Saklambaç ajanları.
NEXT LEVEL ▶
Algılama
Görüş konisi, duyma, hafıza: NPC’ler dünyayı nasıl “bilir”?
SONRAKİ SUNUM ▶