T: tema · Z: kodu büyüt · S: konuşmacı notları · F: tam ekran · Esc: genel bakış · ⌂ ders haritası
OYUNLARDA YAPAY ZEKÂ · HAFTA 9
NavMesh
Gezinti ağları, funnel, Recast — 3B dünyada “nereye yürüyebilirim?”
PRESS ▶ TO START
Bu derste oyunun haritası 🗺️
Neden navmesh? — yol noktalarının beş kusuru (Tozour, World of Warcraft örnekleri)
Navmesh üzerinde yol bulma — çokgen grafında A*, koridor
Funnel algoritması — koridordan en kısa yola (adım adım)
Üretim — Recast: rasterleştir, aşındır, böl
Dinamik dünya — kapılar, engeller, atlama bağlantıları, alan maliyetleri
Kod — Unity NavMeshAgent, Unreal, Godot + iki laboratuvar
Motorlarda — NavMeshSurface, Nav Modifier, NavigationRegion, Recast & Detour
🎮 Bu dersin sonunda…
…bir navmesh’in ne olduğunu ve neden yol noktalarından iyi olduğunu açıklayabilecek, çokgen koridorundan en kısa yolu çıkaran funnel algoritmasını izleyebilecek, Unity/Unreal/Godot’da navmesh pişirip ajan yürütebilecek ve kapı, engel, atlama gibi durumları doğru kurabileceksiniz.
🤔 ISINMA: Y8’DEKİ IZGARA 3B DÜNYADA YETER Mİ?
Merdivenleri, rampaları, köprüleri, masaların altını olan bir 3B seviyeyi kare ızgaraya nasıl bölersiniz?
Izgara katları ve eğimleri bilmez; ince kareler milyonlarca düğüm, kaba kareler kaba yollar demektir.
2000’lerin oyunları elle yerleştirilmiş yol noktaları kullandı: karakterler noktadan noktaya zikzak çizdi, ortadaki kutuya takıldı.
Bugünün çözümü: yürünebilir zemini dışbükey çokgenlerle örtmek. Az düğüm, tam kapsama, her çokgenin içinde serbest hareket. Unity, Unreal ve Godot’nun hepsi bunu kullanır.
🎯 Bu konu için bilmeniz gerekenler
Yeşil = gerekli · kesikli = faydalı ama şart değil. Tıklayınca ilgili sunuma gider.
Neden?Navmesh, Y8’deki A*’ın çalıştığı graftır; sadece düğümler kare değil çokgen. Funnel algoritması tek bir geometri aracı kullanır: Y0’daki çapraz çarpımın işareti (“bu nokta çizginin solunda mı sağında mı?”).
🧰 Kodlamadan korkuyorsanızMotorlarda navmesh tek tıkla pişirilir (Unity: NavMeshSurface → Bake; Unreal: NavMeshBoundsVolume; Godot: NavigationRegion → Bake). Bu sunumun “Motorlarda navmesh” bölümünü önce okuyup oyununuza ekleyebilir, algoritmaları sonra öğrenebilirsiniz.
İçindeki herhangi iki noktayı birleştiren doğru içinde kalır: içinde düz yürümek her zaman güvenli
portal · corridor
kapı kenarı · koridor
İki çokgenin ortak kenarı · yolun geçtiği çokgen dizisi
funnel algorithm
huni algoritması
Koridordan en kısa (köşelere teğet) yolu çıkarır (“string pulling”)
voxel · erosion · agent radius
hacim hücresi · aşındırma · ajan yarıçapı
Recast’ın adımları: dünyayı küplere böl, duvarlardan yarıçap kadar uzaklaş
tile
karo
Büyük haritada navmesh’i parça parça üretme/güncelleme birimi
off-mesh link / NavMeshLink
ağ dışı bağlantı
Atlama, merdiven, ışınlanma: çokgenlerle bağlı olmayan iki noktayı bağlar
carving / dynamic obstacle
oyma / dinamik engel
Hareket eden kutunun navmesh’ten delik açması
area cost
alan maliyeti
Su, çamur, tehlikeli bölge gibi alanları pahalı yapmak
LEVEL 0
Neden navmesh?
yol noktalarının beş kusuru
neden navmesh?
navmesh üzerinde yol bulma
funnel algoritması
navmesh üretimi
dinamik dünya
kod ve laboratuvarlar
motorlarda navmesh
Hikâye: “Fixing Pathfinding Once and For All” (Paul Tozour, 2008)
Deneyimli YZ programcısı Paul Tozour, o yıllarda bilgisayarında kurulu olan çok satan oyunların en son yamalı sürümlerinde karakterlerin duvarlara toslayıp, takılıp, zikzak çizdiği sahnelerden bir video derledi ve şunu yazdı: “Bu oyunların çoğu bildiğim kadarıyla yol noktası grafları kullanıyor. Yol noktası grafları artık modası geçmiş bir yöntem.”
Örnekleri World of Warcraft’tan: Stormwind şehrinin bir parçası ve Halaa kasabası. Açık bir kasaba alanını kapsamak için çok sayıda yol noktası gerekirken, aynı alan birkaç büyük dışbükey çokgenle anlatılabiliyordu.
Tozour’un beş nedeni: yol noktaları…
Bazı dünyalarda gülünç sayıda nokta gerektirir (açık alanlar).
Karakterleri zikzak çizdirir.
Yol düzeltmeye izin vermez: grafın dışını bilmediği için köprüdeki bir sandığın solundan mı sağından mı geçileceğini bilemez.
Farklı hareket eden karakterler için sağlam çalışmaz (büyük, küçük, uçan…).
Yol bulmanın ötesinde YZ’nin ihtiyaç duyduğu veriyi taşımaz (nereye siper alınır, nerede saklanılır…).
Izgara, yol noktası, navmesh
Navmesh’te her çokgen dışbükey olduğu için çokgen içinde düz çizgide yürümek her zaman güvenli; engelin “kenarını” bildiğimiz için yol köşelere tam teğet geçebilir ve ajan çokgenden çıkmadığı sürece yolu serbestçe düzeltebilir.
LEVEL 1
Navmesh üzerinde yol bulma
çokgen grafında A* ve koridor
neden navmesh?
navmesh üzerinde yol bulma
funnel algoritması
navmesh üretimi
dinamik dünya
kod ve laboratuvarlar
motorlarda navmesh
Çizimle: navmesh’te yol üç adımda bulunur
Navmesh üzerinde yol bulmanın üç adımı
1) Konum bulBaşlangıç ve hedef hangi çokgende? “Nokta dışbükey çokgenin içinde mi?” testi (laboratuvar!). Büyük ağlarda önce uzamsal ızgara/ağaç ile adaylar daraltılır.
2) Çokgen grafında A*Düğüm = çokgen, kenar = portal (ortak kenar). Maliyet genelde portal orta noktaları arası mesafe; sezgi Öklid. Sonuç bir koridor: geçilecek çokgenler dizisi.
3) Koridordan yolPortalların orta noktalarından geçmek zikzak çizer. Funnel algoritması koridorun içinde kalan en kısa yolu bulur: köşelere teğet, gerektiği kadar dönüş.
Sonra yolu Y7’deki gibi steering (arrive, kaçınma) ile izleriz. Unity’nin NavMeshAgent’ı bu dördünü birden yapar.
Canlı: tıkla, git 🧭
Farklı odalara tıklayın. Mavi çokgenler koridor; A* bu dikdörtgenler üzerinde çalışıyor (12 düğüm!). Y8’deki ızgara aynı alan için yüzlerce düğüm gerektirirdi.
“Yol”u portal orta noktaları yapın: kırmızı zikzak. Sonra funnel: mor çizgi köşelere teğet geçiyor ve daha kısa (alttaki uzunluğa bakın).
“Kapı açık”ı kapatın: ortadaki dikey geçit kapanır; A* başka bir koridor bulur. Dinamik engel böyle işlenir.
“Ada”ya tıklayın: yol yok. “Atlama bağlantısı”nı açın: ajan kenardan adaya atlıyor (turuncu). Bu bir off-mesh link.
Çokgenleri gizleyin: oyuncu bunların hiçbirini görmez, sadece akıllı yürüyen bir karakter görür.
Farklı odalara tıklayın. Mavi çokgenler koridor; A* bu dikdörtgenler üzerinde çalışıyor (12 düğüm!). Y8’deki ızgara aynı alan için yüzlerce düğüm gerektirirdi.
“Yol”u portal orta noktaları yapın: kırmızı zikzak. Sonra funnel: mor çizgi köşelere teğet geçiyor ve daha kısa (alttaki uzunluğa bakın).
“Kapı açık”ı kapatın: ortadaki dikey geçit kapanır; A* başka bir koridor bulur. Dinamik engel böyle işlenir.
“Ada”ya tıklayın: yol yok. “Atlama bağlantısı”nı açın: ajan kenardan adaya atlıyor (turuncu). Bu bir off-mesh link.
Çokgenleri gizleyin: oyuncu bunların hiçbirini görmez, sadece akıllı yürüyen bir karakter görür.
Navmesh’teki çokgenlerin dışbükey olması neden önemlidir?
Dışbükeylik, “bu çokgendeyken düz git” kararını güvenli yapar: içbükey (ör. L şeklinde) bir çokgende düz çizgi duvara çarpabilir. Böylece yol bulma sadece çokgenler arasında yapılır; içeride serbest hareket edilir.
LEVEL 2
Funnel algoritması
koridordan en kısa yola
neden navmesh?
navmesh üzerinde yol bulma
funnel algoritması
navmesh üretimi
dinamik dünya
kod ve laboratuvarlar
motorlarda navmesh
Huni fikri
Bir tepe noktası (apex; başta başlangıç noktası) ve ondan çıkan iki kenar düşünün: sol kenar ve sağ kenar. Bu bir huni.
Sırayla her portala bakın. Portalın sol ucu huninin içindeyse sol kenarı oraya daralt; sağ uç için de aynısı.
Bir kenar diğerinin üstünden geçerse huni kapanmış demektir: o köşe yolun bir dönüş noktası olur ve yeni tepe noktası oradan başlar.
Hedefe gelince bitti. Sonuç: en az sayıda köşe, en kısa yol.
Mikko Mononen (Recast’ın yazarı) 2010’da bunun kısa bir sürümünü “Simple Stupid Funnel Algorithm” adıyla blogunda yayımladı; birçok motor ve eklentide (ör. A* Pathfinding Project) kullanılır.
🎒 Tek geometri aracı: çapraz çarpıma, b, c noktaları için (b − a) × (c − a) = (bx − ax)(cy − ay) − (cx − ax)(by − ay). İşareti, c’nin a→b çizgisinin solunda mı sağında mı olduğunu söyler (sıfırsa aynı çizgide). Y0’daki çapraz çarpımın aynısı; funnel, nokta-çokgen testi ve görüş hattı hepsi bunu kullanır.
Funnel adım adım
Quiz 2 · funnel
Neden portal orta noktalarından geçen yol yerine funnel kullanırız?
Orta noktalar her zaman koridorun içinde kalır (güvenlidir) ama karakter gereksiz yere sağa sola salınır. Funnel, aynı koridorun içinde kalarak köşelere teğet en kısa yolu bulur. A*’ı ortadan kaldırmaz: önce A* koridoru bulur, sonra funnel o koridoru düzleştirir.
LEVEL 3
Navmesh üretimi
Recast: voxel’den çokgene
neden navmesh?
navmesh üzerinde yol bulma
funnel algoritması
navmesh üretimi
dinamik dünya
kod ve laboratuvarlar
motorlarda navmesh
Recast: navmesh’i otomatik üretmek
Mikko Mononen’in açık kaynak Recast kütüphanesi (yol bulma kısmı Detour) bugün endüstrinin ortak dili: Unreal Engine’in navmesh’i Recast/Detour tabanlıdır; birçok stüdyo ve motor kullanır. Adımlar:
Rasterleştirme: seviye geometrisi küçük küplere (voxel) bölünür.
Yürünebilirlik filtresi: eğimi fazla yüzeyler, tavanı alçak yerler (ajan boyu), basamak yüksekliği kontrolü.
Aşındırma: ajan yarıçapı kadar duvarlardan geri çekil. Kalan alan = ajanın merkezinin gidebileceği yerler.
Bölgeler: kalan alan su seviyesi (watershed) benzeri bir yöntemle bölgelere ayrılır.
Konturlar ve çokgenler: bölge sınırları sadeleştirilip dışbükey çokgenlere bölünür; çokgenler arası portallar çıkarılır.
Ajan boyutu bir parametreNavmesh belirli bir ajan için üretilir: yarıçap, boy, en büyük eğim, basamak yüksekliği. Dev bir golem için başka, kedi için başka navmesh pişirilir (Unity: “Agent Types”). Y8’deki Dragoon sorununun navmesh çözümü budur.
Karolar (tiles)Açık dünyada navmesh tek parça değil, karolar hâlinde üretilir: oyuncu yaklaştıkça yüklenir, bir duvar yıkılınca sadece o karo yeniden pişirilir.
Canlı: 2B’de Recast fikri
🔎 DEMODA DENEYİN
Dört düğmeye sırayla basın: geometri → yürünebilir hücreler → aşındırma (turuncu: ajanın merkezi buraya giremez) → çokgenler.
Ajan yarıçapını 0’dan 6’ya çıkarın. Sütun ile duvar arasındaki dar geçit hangi yarıçapta kapanıyor? Bu, büyük bir karakterin oradan geçmemesi gerektiği anlamına gelir.
Çokgen sayısına bakın: yarıçap büyüdükçe artıyor mu, azalıyor mu? Gerçek Recast dikdörtgen değil, keyfi dışbükey çokgenler üretir; sayı çok daha azdır.
Bu demo Recast’ın 2B ve sadeleştirilmiş bir taklidi (açgözlü dikdörtgen birleştirme). Gerçek boru hattı 3B’dir, eğim ve yükseklik de içerir ve konturları sadeleştirir.
🎬 Ara: navigasyon ağı nasıl çalışır?
How A Navigation Mesh Works in 3D Games AI and Games (Tommy Thompson) · 16 dk 14 sn · YouTube’da aç
Navmesh’in gerçek oyunlardaki yolculuğu: seviyeden yürünebilir alanı çıkarmak, çokgenler üzerinde yol aramak ve yolu düzleştirmek. Bu sunumun bütün parçalarının tek videoda birleşimi.
🤔 İzlerkenVideoda yürünebilir alan hangi adımlarla çıkarılıyor? Karakterin yarıçapı navmesh’e nasıl yansıyor? Kapı açılınca ya da köprü yıkılınca navmesh’e ne oluyor?
LEVEL 4
Dinamik dünya
kapılar, engeller, atlamalar, maliyetler
neden navmesh?
navmesh üzerinde yol bulma
funnel algoritması
navmesh üretimi
dinamik dünya
kod ve laboratuvarlar
motorlarda navmesh
Statik navmesh, dinamik dünya
Hareketli engeller
Kaçınma (Unity NavMeshObstacle, carve kapalı): ajanlar engelin etrafından yerel olarak dolaşır; yol değişmez. Hareket eden şeyler (araba, yuvarlanan kaya) için.
Oyma (carve açık): engel navmesh’te delik açar, yollar yeniden hesaplanır. Duran şeyler için (kapatılan kapı, bırakılan sandık). Pahalıdır; sürekli hareket eden şeyde kullanmayın.
Ağ dışı bağlantılar (off-mesh links)Atlama, aşağı inme, merdiven, tırmanma, ışınlanma: çokgenlerle bağlı olmayan iki noktayı bir “kenarla” bağlarsınız. Ajan oraya varınca özel bir animasyon oynatılır (Unity NavMeshLink, Unreal Nav Link Proxy, Godot NavigationLink).
Alan türleri ve maliyetlerNavmesh’in bölgeleri “yürünebilir”, “su”, “çamur”, “tehlikeli” gibi alan türleriyle işaretlenir; her türün maliyeti var ve ajan türüne göre bazıları tamamen yasak olabilir. Unity: NavMeshModifier + alan maliyetleri; Unreal: Nav Modifier Volume + Nav Area sınıfları.
⚠️ Sık hataKapıyı fiziksel olarak kapatıp navmesh’e haber vermemek: ajan kapıya kadar yürür, orada sonsuza kadar iter. Ya kapıya oyan bir engel koyun ya da kapalıyken portalı/alanı yasaklayın (demodaki “kapı açık” kutusu).
Navmesh yetmediğinde: uçan ve tırmanan
3B uçuş: seyrek voxel ağaçlarıNavmesh bir zemin temsilidir. Uzayda, havada ya da su altında hareket eden düşmanlar için 3B uzay gerekir. Warframe ekibi (Daniel Brewer, Game AI Pro 3, 21. bölüm) uçan düşmanlar için uzayı seyrek voxel octree ile temsil edip üstünde A* çalıştırdı: boş büyük bölgeler tek düğüm, engel kenarları ince ayrıntılı.
Eğilmek, sürünmek, yüzmekVoxel tabanlı navmesh normalde sadece “ayakta durulabilen” yerleri içerir. Kevin Kirst (Game AI Pro 2, 32. bölüm): üretimi genişletip eğilerek, sürünerek, yan yan ya da yüzerek geçilebilen alanları da işaretlemek; ajan yolu izlerken bu bilgiyle duruşunu değiştirir.
Taktik yol bulma (tehlikeli alanlardan kaçınmak, siper siper ilerlemek) navmesh üzerinde maliyetleri değiştirerek yapılır: Daniel Brewer, “Tactical Pathfinding on a NavMesh” (Game AI Pro, 27. bölüm) — Y12’de.
Quiz 3 · dinamik
Oyunda sürekli yuvarlanan dev bir kaya var. Unity’de ona hangi ayar uygun?
Sürekli hareket eden şeyler için oyma pahalıdır ve sürekli yeniden yol hesaplatır; yerel kaçınma yeterlidir. Oyma, bir süre yerinde duran engeller içindir (Unity’nin “Carve Only Stationary” seçeneği de bunu yapar). Static işaretlemek ise kayayı hiç hareket etmeyecekmiş gibi navmesh’e gömer.
LEVEL 5
Kod ve laboratuvarlar
geometri ve motor API’leri
neden navmesh?
navmesh üzerinde yol bulma
funnel algoritması
navmesh üretimi
dinamik dünya
kod ve laboratuvarlar
motorlarda navmesh
Geometri araçları
Dikkat: ekranda y aşağı doğru büyür; bu “sol” ve “sağ”ın anlamını değiştirir. Nokta-çokgen testi yönden bağımsızdır (işaretlerin aynı olması yeter); funnel’da ise tutarlı bir yön seçmek gerekir.
Unity: NavMeshAgent ile ajan
Package Manager → AI Navigation paketini kurun.
Zemin nesnesine NavMeshSurface ekleyin → Bake. Mavi örtü = navmesh.
Kapı/sandık: NavMeshObstacle (carve). Su/çamur: NavMeshModifier ile alan türü.
Atlama/merdiven: NavMeshLink; ajan bağlantıya gelince isOnOffMeshLink olur, animasyonu siz oynatırsınız.
Unreal ve Godot
Godot örneğinde dil GDScript; renklendirme Python sözdizimiyle. Web’de Recast’in WebAssembly sürümü recast-navigation-js da var.
🌱 Isınma kodu: ajan bu çokgende mi?
Navmesh’te yol bulmanın ilk adımı: “ajan ve hedef hangi çokgende?” Canlı demodaki çokgenler dikdörtgen olduğu için bu dört karşılaştırma yeter. Keyfi dışbükey çokgenler için birazdan çapraz çarpımlı sürümünü yazacaksınız.
🌱 Isınma kodu: portalın orta noktası
En basit navmesh yolu: koridordaki her portalın orta noktasından geç. Her zaman güvenlidir (koridorun içinde kalır) ama zikzak çizer; funnel bunu düzeltir. A* da çokgenler arası mesafeyi genelde bu orta noktalarla ölçer.
🧪 Canlı laboratuvar: ajan hangi çokgende?
Başlangıç kodu sadece köşeleri belli bir yönde sıralı çokgenlerde çalışır. Çokgen ters yönde sıralanmışsa hep false verir. Düzeltin: ilk sıfır olmayan işareti hatırlayın ve farklı işaret görürseniz false döndürün. Sonra fareyi soldaki çokgenlerin üstünde gezdirin.
🐍 Laboratuvar: sol mu, sağ mı?
Funnel, görüş hattı ve nokta-çokgen testinin ortak taşı. Formül: (bx − ax)(cy − ay) − (cx − ax)(by − ay). Testlerde aynı çizgi üstündeki ve a = b olan durumlar da var.
🐍 Laboratuvar: çokgen alanı
Ayakkabı bağı formülü. Navmesh araçları alanı, çok küçük (ajanın sığamayacağı) çokgenleri temizlemek ve rastgele bir noktayı (ör. devriye hedefi) çokgenin alanıyla orantılı seçmek için kullanır.
NavMeshSurface (pişirme, çalışma anında da), NavMeshAgent (yol + funnel + kaçınma), NavMeshObstacle (oyma), NavMeshLink, NavMeshModifier (alan türü), birden çok ajan türü.
Hedefi navmesh’e yapıştırın: tıklanan nokta navmesh dışındaysa SamplePosition ile en yakın noktayı kullanın.
Steering ile birleştirin: ajanın hız ve dönüşünü animasyonla eşleyin (kayan ayaklar!).
“Ajan takılıyor” sorunlarının çoğu…
Navmesh’te görünmeyen bir boşluk (iki çokgen bağlı değil)
Yarıçap pişirmedekinden büyük ajan
Fizik çarpıştırıcısı navmesh’e dahil edilmemiş bir engel
Rigidbody ile NavMeshAgent’ın aynı anda konumu değiştirmesi
Hedefin navmesh dışında olması
⚙️ PerformansBüyük dünyada karolu, çalışma anında üretim; yalnızca değişen karoyu yeniden pişirin. Çok sayıda ajan için yol isteklerini sıraya koyun (Unity bunu kendi yapar, “Pathfinding Iterations Per Frame”).
🤖 Bu konuyu bir YZ kod asistanıyla yazarken
Sık yapılan hatalar — kontrol edin
Eski Unity “Navigation” penceresi talimatları (2022 öncesi; artık NavMeshSurface)
OffMeshLink yerine NavMeshLink karışıklığı
NavMeshAgent varken transform.position’ı elle değiştirmek (Warp kullanın)
Hedefi navmesh dışında vermek ve “yol bulamıyor” sanmak
Godot 3 ile 4 navigasyon API’lerini karıştırmak
İyi bir istek (prompt) örneği
“Unity 6, AI Navigation 2.x. Bir zombi için: NavMeshSurface çalışma anında yeniden pişirilebilsin (oyuncu barikat kurunca). Zombi NavMeshAgent ile oyuncuyu kovalasın; SetDestination’ı her karede değil, oyuncu 1 m’den fazla hareket edince çağırsın. Barikatlar NavMeshObstacle (carve, yalnızca dururken). Pencerelerden atlama için NavMeshLink; bağlantıdayken 0.6 sn süren bir atlama animasyonu oynat, sonra CompleteOffMeshLink. Hız büyüklüğünü Animator “Speed”e gönder. Gizmos ile agent.path köşelerini çiz.”
Motoru ve sürümünü (Unity 6 AI Navigation, UE 5.x, Godot 4.x) açıkça yazın: API’ler sürümler arasında çok değişti
Ajan ölçülerini ve hangi nesnelerin navmesh’e dahil olacağını söyleyin
Kapı, atlama, su gibi özel durumları tek tek listeleyin
Hata ayıklama görselleştirmesi (yol çizgisi, hedef) isteyin
🔬 Araştırma ucu
Prosedürel dünyalarHer oyunda yeniden üretilen haritalarda (Y15) navmesh’in hızla, karolar hâlinde, yükleme ekranını uzatmadan üretilmesi. Hangi parametreler ne kadar süre kazandırıyor?
Yıkılabilir ortamDuvarlar patlayınca navmesh’in yerel güncellenmesi ve bu sırada yolu izleyen ajanların “kör” kalmaması; D* Lite (Y8) gibi artımlı yöntemlerle birleşim.
Öğrenilmiş hareket + navmeshPekiştirmeli öğrenmeyle eğitilmiş bir ajan (Y13) navmesh yolunu “rehber” olarak kullanıp zıplama, kayma gibi hareketleri kendisi seçebilir mi? Parkur oyunları için ilginç.
💬 Tartışma soruları
Yanınızdakiyle 2 dakika konuşun, sonra sınıfça tartışalım
Oynadığınız bir oyunda bir karakterin bir kapıya, merdivene ya da köşeye takılıp kaldığını gördünüz mü? Bu derste öğrendiklerinizle sebebini tahmin edin: navmesh’te delik mi, haber verilmeyen kapı mı, birim boyu mu?
Aynı seviyede hem bir fare hem bir dev dolaşacak. Tek navmesh yeter mi? Dev, farenin geçtiği delikten geçmeye çalışırsa ne olur?
Oyuncu bir duvarı patlatıp yeni bir geçit açtı. Navmesh’in bunu “öğrenmesi” için ne yapılmalı? Bütün haritayı yeniden üretmek neden kötü bir fikir?
Uçan bir ejderha ya da yüzen bir köpekbalığı için navmesh işe yarar mı? Yaramazsa ne kullanılır?
🚀 Proje ve araştırma önerileri
[kolay]Tıkla-git — Unity ya da Godot’da bir oda + NavMeshSurface + tıklanan yere yürüyen karakter. Navmesh’i ve yolu ekranda çizin.
[kolay]Kapı anahtarı — Oyuncu bir şalteri çekince kapı açılsın; kapalıyken NavMeshObstacle (carve) ile geçit kapansın. Düşman başka yoldan dolaşıyor mu?
[orta]Parkur düşmanı — Platformlar arası atlama ve aşağı inme bağlantıları; düşman oyuncuyu bağlantıları kullanarak kovalasın.
[orta]p5.js navmesh — Bu sunumdaki dikdörtgen navmesh + funnel’ı kendi seviye editörünüzle yazın.
[zor]Mini Recast — 2B bir haritadan otomatik navmesh: rasterleştirme, aşındırma, bölgeler, kontur sadeleştirme, üçgenleme.
[araştırma]Navmesh vs ızgara — Aynı 3B seviyede ızgara A* ve navmesh A* + funnel’ı düğüm sayısı, süre ve yol kalitesiyle karşılaştırın.
Neler öğrendik? 🎒
Navmesh: yürünebilir zemini örten dışbükey çokgenler; yol noktalarının beş kusurunu çözer (Tozour).
Funnel: tepe, sol/sağ kenar, çapraz çarpım; köşelere teğet en kısa yol.
Üretim (Recast): rasterleştir, filtrele, aşındır (ajan yarıçapı), bölgele, çokgenleştir; karolar.
Dinamik: kaçınma vs oyma, ağ dışı bağlantılar, alan maliyetleri; uçuş için voxel octree (Warframe).
Araçlar: Unity AI Navigation, Unreal Navigation, Godot Navigation, Recast/Detour, three-pathfinding.
Sonraki: grup YZ’si — formasyonlar, sürüler, takım koordinasyonu.
🎮 Bu sunumdaki oyunlar
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.