ÖNERİ KoMobile Projesi İçin Destek / Fikir Alışverişi – Orijinal Open-KO Hissiyatını Unity'ye Aktarma

Üye
Katılım
28 Eki 2026
Mesajlar
9
Tepkime puanı
0
Herkese selamlar, değerli forum üyeleri ve geliştirici dostlar!
Uzun süredir üzerinde çalıştığım KoMobile (Open-KO tabanlı Unity Client) projemde sona yaklaşmakla birlikte, en kritik noktalardan biri olan oynanış hissiyatı, skill efektleri (FX) ve animasyon senkronizasyonu konusunda bazı zorluklar yaşıyorum.

Orijinal C++ tabanlı Knight Online motorunun o kendine has vuruş hissiyatını, akıcılığını ve reflekslerini Unity (C#) tarafına tam anlamıyla yansıtmak istesem de, özellikle animasyon geçişleri ve skill cast mekaniklerinde tıkandığım yerler oluyor.

Şu ana kadar projede kat ettiğim temel aşamalar şunlar:

1- Master Importer Altyapısı: Open-KO client/server dosyalarından .smd haritaları, zoneleri, mob/NPC spawn koordinatlarını ve .gobo/.mesh modellerini Unity editörüne aktaracak özel bir Master Importer aracı kurdum.

2- Ağ ve Paket Katmanı: Socket yönetimi, KoByteBuffer, opcode'lar ve login/game client akışını (port 15100 / 15001) entegre ettim.

3- Animasyon Sistemi: Standart AnimatorController yerine PlayableGraph ve KoChrClipBinder mimarisiyle karakter hareketlerini (yürüme, koşma, saldırı, ölüm) bağlıyorum.

Yardım / Fikir Beklediğim Noktalar:

1. Vuruş ve Skill Hissiyatı: Skill cast edildikten sonra hedef üzerinde çıkan FX efektlerinin zamanlaması ve kamera sarsıntısı / hit-stop etkilerini Unity'de en pürüzsüz nasıl optimize edebiliriz?

2. Animasyon Geçişleri: Sunucudan gelen Move, Attack ve MagicProcess paketleriyle client üzerindeki clip'lerin gecikmesiz (lag hissettirmeden) senkronize edilmesi konusunda önerileriniz var mı?

3. Optimizasyon ve Akıcılık: Mobil/tablet odaklı bu yapıda kalabalık CZ (Colony Zone) savaşlarında FPS düşüşlerini engellemek için izlediğiniz özel bir yöntem var mı?

İletişim & İş Birliği:

Nasıl bir prompt yazmalıyım bu yolda nasıl ilerlenmeli,Bu konularda tecrübeli olan,Fikir vermek isteyen veya projeye katkı sunmak arzusunda olan teknik destek sağlamak isteyen tüm geliştirici arkadaşların yorumlarını ve değerli fikirlerini bekliyorum. Herkese çalışmalarında başarılar dilerim!
 
S.Moderatör
Saygın Üye
Coder
ACS Sağlayıcısı
Sosyal Üye
Server Sahibi
Katılım
21 Ağu 2022
Mesajlar
253
Çözümler
10
Tepkime puanı
533
Yaş
37
Selamlar hocam, öncelikle eline emeğine sağlık. Ben de bir süredir Unity tarafında kendi projem için benzer altyapılar (ve Open-KO dosya/paket yapıları) üzerine kafa yoran biri olarak harcadığın emeğin büyüklüğünü çok iyi biliyorum. Özellikle o eski .smd ve .gobo/.mesh formatlarını Unity koordinat sistemine (left-handed / right-handed dönüşümleri ve scale farklarına) patlamadan oturtmak bile başlı başına sabır testi. Master Importer'ı yazıp soket/paket akışını oturtmuş olman zaten işin en ağır kısmını sırtladığını gösteriyor. Forumda böyle teknik derinliği yüksek projeleri görmek bizim için de büyük keyif.
Orijinal Knight Online'ın o kendine has "tok" vuruş hissiyatını Unity motoruna taşırken herkesin yaşadığı o ince ayar sancılarını kendi projemden de çok iyi biliyorum. Ben de karakter hareketlerini ve skill akışını senkronize ederken başlarda animasyonların paketlerin gerisinde kalmasıyla bayağı boğuşmuştum. Tecrübelerime dayanarak takıldığın noktalar için birkaç öneri paylaşayım:
1. Vuruş ve Skill Hissiyatı (FX & Hit-Stop)KO'daki o vuruş ağırlığını veren temel şey, animasyonun tam kılıcın indiği karesiyle FX'in ve hasar sayısının aynı milisaniyede buluşmasıdır. Sunucudan paket dönmesini beklersen o hissiyat ölür, oyun hantal kalır.
  • Skill tuşuna basıldığı an sunucudan onay beklemeden client tarafında FX'i ve sesi tetikle (client-side prediction). Sunucudan onay paketi geldiğinde sadece hasarı ve hedef validasyonunu kesinleştirirsin.
  • Ağır skillerde (Warrior 70-80, Rogue Spike vs.) vuruş anında animasyonu veya zaman akışını 30-40 milisaniyeliğine çok hafif dondurmak (hit-stop) ve kameraya ufak bir sarsıntı vermek (Cinemachine Impulse bu iş için biçilmiş kaftandır) o etkiyi doğrudan oyuncuya geçirir.
2. Animasyon ve Paket SenkronizasyonuStandart AnimatorController yüküne girmeden doğrudan PlayableGraph mimarisine yönelmen hem mobil performans hem de tam kontrol açısından çok isabetli bir karar olmuş. Ben de geçiş sürecinde benzer bir yol izlemiştim; Animator state machine'i KO'nun ani "skill bozuldu / el düştü" (casting fail) reflekslerine çok hantal kalıyor.
  • Sunucudan gelen Move paketlerinde karakterlerin ışınlanıyormuş gibi görünmemesi için araya ufak bir buffer (tampon) koyup pozisyonları yumuşatarak (Lerp) ilerletmek en temiz yöntem.
  • MagicProcess paketi düştüğünde yürüme animasyonundan skill cast animasyonuna geçiş (blend) süresini minimumda tut (0.05 saniye gibi). Aksi halde karakter elini kaldırana kadar hasar çoktan çıkmış olur. Eğer skill fail verirse veya bozulursa da animasyonun bitmesini beklemeden ağırlıkları sıfırlayıp anında normal duruşa döndürmelisin.
3. CZ Kalabalığı ve Mobil OptimizasyonMobilde yüzlerce karakteri aynı anda render etmek cihazı çok hızlı ısıtır ve FPS'i yere çeker.
  • Kamera görüş açısında olmayan (frustum dışı) veya belirli bir mesafenin uzağındaki karakterlerin PlayableGraph güncellemelerini ve animasyon hesaplamalarını tamamen uyku moduna al. Sadece ekrandakiler ve yakın çevredeki çatışma alanındakiler hesaplansın.
  • Zırh, silah ve pelerin gibi karakter parçalarını mümkün olduğunca dinamik olarak tek mesh altında birleştirip GPU Instancing kullanmaya çalış. CZ kalabalığında draw call sayısını ne kadar aşağı çekersen oyun o kadar yağ gibi akar.
Nasıl İlerlemeli / Nasıl Prompt Yazmalı?Bu aşamadan sonra yapay zekadan destek alırken büyük sistemleri tek seferde istemek yerine modüler ilerlemek işini çok hızlandırır. Örneğin; "Knight Online animasyon sistemi yaz" demek yerine, "Unity PlayableGraph kullanarak iki clip arasında 0.05 saniyede geçiş yapan ve dışarıdan gelen bir iptal komutuyla animasyonu anında kesen C# yapısını yaz" gibi doğrudan tek bir soruna odaklanan net promptlar kullanmak çok daha temiz ve hatasız kod üretmeni sağlar.
Projenin gelişimini forum ekibi olarak yakından takip ediyoruz, şimdiden kolaylıklar ve başarılar dilerim. Süreçte takıldığın veya fikir alışverişi yapmak istediğin spesifik bir nokta olursa konuyu güncel tutman yeterli, paslaşırız.
 
Üst Alt