1 puan yazan GN⁺ 2023-12-10 | 1 yorum | WhatsApp'ta paylaş
  • Murder Engine, FNA üzerine inşa edilmiş piksel sanat için bir ECS oyun motorudur; şu anda geliştirme aşamasında olduğu için çok sayıda değişiklik ve breaking change beklenmelidir
  • Başlangıç örnekleri olarak neocityexpress game jam projesi ve hellomurder gösterilir; dünya, entity ve component oluşturma akışını sergilerler
  • Proje yapısı game ve game.editor olarak ayrılır; ayrı bir editor.exe olmadan kullanıcının projesi içinde editörü doğrudan kontrol etme yaklaşımını benimser
  • Geliştirme ortamı Linux, MacOS, Windows, Steam Deck destekler; gereken şey .NET 8 SDK'dır ve oyun hedefleri Linux, MacOS, Windows'u destekler
  • Henüz NuGet paketi olmadığı için git submodule olarak ekleyip .csproj içinde referans verme yöntemi önerilir; web ve mobil için şu anda resmi destek planı yoktur

Murder Engine'in niteliği ve durumu

  • Murder Engine, FNA tabanlı bir piksel sanat ECS oyun motorudur
  • Şu anda geliştirilmekte olan bir motordur; release branch'leri stabil tutulmaya çalışılsa da çok sayıda değişiklik ve henüz tamamlanmamış kısım beklenmelidir
  • README “Proceed at your own risk” diye uyarır ve breaking change olasılığını açıkça belirtir

Başlangıç örnekleri ve ECS öğrenme yolu

  • Hızlıca örneklere bakıp kavramak isteyen kullanıcılar için aşağıdaki projelerden başlanması önerilir
  • Murder'da ECS'nin nasıl uygulandığını görmek için Bang belgelerine bakılması söylenir
    • Bang, Murder'ın kullandığı ECS framework'üdür

Proje yapısı ve editör yaklaşımı

  • Murder proje yapısı resources, src/game, src/game.editor olarak ayrılır
    • game içinde son oyun için bin, packed, resources bulunur
    • game.editor içinde oyun editörü için bin ve resources bulunur
  • Harici bir editor.exe yoktur; yalnızca kullanıcının kendi projesi vardır
  • Bu yapı, MonoGame veya FNA proje geliştirme tarzında olduğu gibi projenin tamamını doğrudan kontrol edebilmek için seçilmiştir
  • Editörün ayrı bir proje olarak tutulmasının nedeni, editör kodunun oyun koduna temas etmemesini sağlamak ve editör tarafında istenen işleri özgürce yapabilmektir

Derleme ve bağımlılık yöntemi

  • Şu anda Murder için NuGet paketi yoktur
  • Önerilen yöntem, Murder'ı git submodule olarak ekleyip .csproj içinde referans vermektir
  • Referans örneği HelloMurder.csproj dosyasında bulunur

Gereksinimler ve desteklenen platformlar

  • Editörü çalıştıran geliştirme ortamı Linux, MacOS, Windows, Steam Deck destekler
  • Gereken şart .NET 8 SDK kurulumudur
  • Oyun hedef platformları Linux, MacOS, Windows'u destekler
    • Linux'a Steam Deck de dahildir
  • Konsol desteği şu anda devam eden bir çalışmadır
  • Web ve mobil iOS·Android için şu anda resmi destek planı yoktur

Katkı ve geri bildirim

  • Proje hâlâ çok erken aşamadadır
  • Öneriler veya geri bildirimler için geliştiriciyle iletişime geçilebileceği; gerçek kullanım ve geri bildirimle ilgilenildiği belirtilir

1 yorum

 
GN⁺ 2023-12-10
Hacker News yorumları
  • Adında saint11 olduğunu görünce iyi olacağına emin oldum. Piksel art eğitimleri gerçekten çok iyi düzenlenmiş: http://saint11.org/blog/pixel-art-tutorials/

    • İlk kez gördüm; kısa bir göz atmak bile bunun tüm internetteki en iyi blog olduğuna ikna olmama yetti
    • Aynı kişi olduğunu bilmiyordum. Bu eğitimi daha önce görmüştüm; içeriği açarak gösterme biçimi harikaydı
    • saint11, Celeste oyununun sanatını yapan kişi gibi görünüyor
    • Celeste ve Towerfall’da çalıştı; ikisinin de piksel art’ı müthiş. Gerçekten çok yetenekli görünüyor
  • Yeni oyun motorları ve ECS framework’leri izlemesi keyifli şeyler. ECS kısmı olan Bang’e bakınca CarComponent gibi bileşenler ve CarMoverSystem gibi sistem örnekleri var; sistemler sınıf ve uyguladıkları arayüz de ne zaman çalışacaklarını belirliyor gibi görünüyor
    DOTS’a biraz benziyor, ama sistemlerin oyuna nerede eklendiğini ve aynı türdeki sistemlerin nasıl sıralandığını henüz bulamadım. Araba ve engeller gibi birden fazla farklı sorgu yapan sistemlerin nasıl göründüğünü de merak ediyorum
    Bang kaynak kod üreteci kullanıyor gibi. GetComponent’ın aksine TryGetVelocity, RemoveFriction, SetVelocity; Velocity, Friction bileşenlerinin varlığına göre üretiliyor gibi görünüyor. Belki de bileşen ID önbelleği yüzündendir, emin değilim
    Arketip tabanlı değil; her entity component id => component sözlüğü tutuyor ve her sistem hangi entity’lerin filtresine uyduğunu izliyor. Performansının ne kadar iyi olacağını bilmiyorum, ama birçok oyunda geliştirici ergonomisi performanstan daha önemli olabilir
    Değişiklikler de anında uygulanıyor gibi. Öyleyse bir sistem bir entity’ye bileşen ekleyip/sildiğinde ve bunun filtre eşleşmesini değiştirdiğinde, aynı tick içinde işlenip işlenmemesinin entity ID’sine göre değişip değişmediğini merak ediyorum

    • Sistemlerin çalışma sırası da merak konusu. Yeni sistemleri sabit bir listeye elle eklemek can sıkıcı olabilir; ama aynı zamanda sistemler arasında çoğu zaman örtük bağımlılıklar olduğundan, çalışma sırasını derleme zamanında sabitlemek de önemli
      Belgelere kabaca baktığımda bu bağımlılıkları veya sırayı açıkça belirtmenin bir yolunu göremedim; bu motorun bunu nasıl ele aldığını merak ediyorum
  • Bu framework ile yapılmış jam oyununun Itch sayfası ve indirmesi: https://saint11.itch.io/neo-city-express
    72 saatlik bir jam oyunu için etkileyici. Sanatı ve yazıları iyi; beklenmedik biçimde mekanik açıdan da eğlenceli

  • Çok iyi. Editör inanılmaz stil sahibi, hoşuma gitti. MonoGame’i performanslı ve çapraz platform olduğu için her zaman sevmişimdir; ama büyük bir oyun yapmadım, sadece ara sıra demolar yaptım

  • Güzel görünüyor. C# oyun geliştirmede GC duraklaması sorunu var mı merak ediyorum

    • Basit nesne yönetimi ve simülasyon gecikmesinin küçük katları aralığında GC.Collect()’i açıkça çağırma yöntemiyle oldukça iyi sonuç aldım. En uygun nokta sahne içeriğine ve oynanış tarzına, yani sahne nesnelerinin nasıl değiştiğine bağlı görünüyor
      Q3A tarzı sahne ve oynanışta oldukça sağlam. Her tick’te değişen sahne öğesi neredeyse yok, bu yüzden GC duraklamaları çoğunlukla ihmal edilebilir
      .NET 6+’ta, kendin-yap motorlarda stratejik olarak hızlı tekrarlarla çağrıldığında GC duraklamaları 1–5 ms civarında ölçüldü. Proje ayarlarında eşzamanlı/sunucu/arka plan GC’yi kapatıp ön plan + workstation GC kullanmak en düşük jitter’ı verdi
      Seçenekler ya belleği %100 elle yönetmek ya da çöpü olabildiğince sık temizlemek gibi görünüyor. Modern .NET’te düşük seviyeli DLL hack’leri gibi kara büyüler olmadan GC’yi tamamen kapatmak neredeyse imkânsız. İş olayı ya da oyun turu arasında süreci yeniden başlatabiliyorsanız Process.Exit() de bazı alanlarda geçerli bir GC tekniği
    • Var. Miguel de Icaza’nın oyun motorlarına C# eklenmesinin geçmişini ve Swift’in referans sayımının GC duraklaması sorununu önlediğini savunarak Godot’ta Swift kullanmayı neden heyecan verici bulduğunu anlatan iyi bir sunumu var
      https://youtu.be/tzt36EGKEZo?si=WNxwcTPGFbJABKez
    • GC sorununun neredeyse sadece Unity tarafında olduğunu düşünüyorum. Stride gibi normal .NET kullanan diğer oyun motorları sorunsuz çalışıyor
    • Var. Unity’de olduğu gibi Unreal’da da GC var; bu yüzden başlangıçta ayırma yapıp nesne havuzlama kullanmak gerekiyor
    • Diğer çoğu dil gibi C# da allocation’dan kaçınacak şekilde yazılabilir
  • Sadece bağlantıyı okuyarak pek anlayamadım; Murder oyun motoruyla F# oyunu yapmanın ne kadar zor olacağını merak ediyorum

  • Unity’de ECS’i biraz kullanmıştım; Murder’ın ECS’i çok daha kolaydı. Geliştiriciler gerçekten iyi iş çıkarmış
    Murder ile küçük bir arcade oyun projesi yaptım, buradan oynanabilir: https://nopetrides.itch.io/bombs-away

    • Farkları biraz daha ayrıntılı açıklayabilir misin?
  • saint11’in tanıtım sayfasında şöyle yazıyor: “Murder Engine: Isa tarafından yapılmış 2D piksel art C# ECS oyun motoru! Ben genelde render ve fizik tarafında yardım ediyorum.”
    Isa: https://isadorasophia.com/projects/

  • Oyun motoruyla ilgisiz ama kötü niyetli birinin “şu hacker sitesi insanları murder’ı tartışıyor” diyebilecek olması komik
    Son zamanlarda böyle tamamen zararsız materyallerin ısrarcı bir hasım tarafından nasıl kullanılabileceğini çok düşünüyorum

    • Biraz zorlama gibi, ama The Onion yazılarını kelimesi kelimesine gerçek sanan insanlar da oldu
      Yine de bu kadar kolay çürütülebilen bir durumda “insanlar murder’ı tartışıyor” ifadesiyle düpedüz yalan arasında büyük bir fark var mı bilmiyorum
    • Bu şekilde, ama tersinden düşünmek, ana akım medya haberlerini tüketmenin tek yolu. Günümüzde her şey inanılması güç derecede taraflı ve gülünç
  • ECS nedir?

    • Muhtemelen Entity Component System. Oyun motorlarında yaygın bir mimari
    • Son zamanlarda popüler olan yüksek performanslı bir mimari. Unity son dönemde bunu epey yaygınlaştırmaya çalışıyor