1 ポイント 投稿者 GN⁺ 2023-12-10 | 1件のコメント | WhatsAppで共有
  • Murder Engine は FNA 上に構築されたピクセルアート向けの ECSゲームエンジン で、現在も開発中のため変更が多く、breaking change が発生する可能性がある
  • 導入用の例としては neocityexpress のゲームジャムプロジェクトと hellomurder が示されており、ワールド・エンティティ・コンポーネントの生成フローを確認できる
  • プロジェクト構成は gamegame.editor を分離し、別途 editor.exe を用意せず、ユーザーのプロジェクト内で エディタを直接制御 する方式を採用している
  • 開発環境は Linux, MacOS, Windows, Steam Deck をサポートし、必要なのは .NET 8 SDK で、ゲームのターゲットは Linux, MacOS, Windows をサポートする
  • まだ NuGet パッケージ はなく、git submodule として配置し .csproj から参照する方法が推奨されており、Web・モバイルの公式サポート予定は現時点ではない

Murder Engineの性格と現状

  • Murder Engine は FNA ベースのピクセルアート向け ECSゲームエンジン
  • 現在開発中のエンジンであり、リリースブランチは安定維持を目指しているものの、多くの変更や未完成の部分があることを前提にする必要がある
  • README では "Proceed at your own risk" と警告しており、breaking change の可能性を明示している

導入例とECSの学習導線

  • 素早く例を見て把握したいユーザーには、次のプロジェクトから見始める流れが推奨されている
    • game jam project: Murder のアーキテクチャを確認できるゲームジャムプロジェクト
    • Hello World project: ワールド、エンティティ、コンポーネントの生成方法を示すサンプル
  • Murder で ECS がどのように適用されているかは Bang のドキュメントを参照するよう案内している
    • Bang は Murder が採用している ECSフレームワーク

プロジェクト構成とエディタ方式

  • Murder のプロジェクト構成は resources, src/game, src/game.editor に分かれている
    • game には最終ゲーム向けの bin, packed, resources が含まれる
    • game.editor にはゲームエディタ向けの binresources が含まれる
  • 外部の editor.exe は存在せず、ユーザー自身のプロジェクトだけが存在する
  • この構成は、MonoGame や FNA のプロジェクト開発スタイルのように、プロジェクト全体を直接制御できるようにするための選択
  • エディタを別プロジェクトにしている理由は、エディタコードがゲームコードに触れないように しつつ、エディタ側では必要な作業を自由に行えるようにするため

ビルドと依存関係の扱い

  • 現時点で Murder 向けの NuGet パッケージ はない
  • 推奨される方法は、Murder を git submodule として追加し、.csproj から参照すること
  • 参照例は HelloMurder.csproj にある

要件と対応プラットフォーム

  • エディタを実行する開発環境は Linux, MacOS, Windows, Steam Deck をサポートする
  • 必要要件は .NET 8 SDK のインストール
  • ゲームのターゲットプラットフォームは Linux, MacOS, Windows をサポートする
    • Linux には Steam Deck が含まれる
  • コンソール対応は現在進行中
  • Web とモバイルの iOS・Android は、現時点では公式サポートの予定がない

コントリビュートとフィードバック

  • プロジェクトはまだ非常に初期段階
  • 提案やフィードバックは作者に連絡可能で、実際の利用とフィードバックに関心があると案内している

1件のコメント

 
GN⁺ 2023-12-10
Hacker Newsのコメント
  • saint11 の名前が付いているのを見て、良いものだと確信した。ピクセルアートのチュートリアルが本当にうまく整理されている: http://saint11.org/blog/pixel-art-tutorials/

    • 初めて見たが、少し眺めただけでインターネット全体で最高のブログだと確信した
    • 同じ人だとは知らなかった。昔このチュートリアルを見たことがあり、内容を展開して見せるやり方が見事だった
    • saint11はゲーム Celeste のアートを手がけた人のようだ
    • CelesteとTowerfallに参加していて、どちらもピクセルアートが優れている。本当に多才に見える
  • 新しいゲームエンジンと ECSフレームワーク は見ていて楽しい。ECS部分であるBangを見ると、CarComponent のようなコンポーネントと CarMoverSystem のようなシステムの例があり、システムはクラスで、実装したインターフェースが実行タイミングを決める構造に見える
    DOTSに少し似ているが、システムがゲームのどこで追加されるのか、同じ種類のシステムがどう並べられるのかはまだ見つけられなかった。車と障害物のように、異なるクエリを複数行うシステムがどういう形になるのかも気になる
    Bangはソースコードジェネレーターを使っているようだ。GetComponent と違って TryGetVelocityRemoveFrictionSetVelocityVelocityFriction コンポーネントの存在をもとに生成されているようで、おそらくコンポーネントIDのキャッシュのためだと思うが、確かではない
    アーキタイプベースではなく、各エンティティが component id => component の辞書を保持し、各システムがどのエンティティがフィルターに合うかを追跡する方式だ。性能がどれほど良いかは分からないが、多くのゲームでは性能より開発のしやすさのほうが重要なこともある
    変更も即時に適用されるように見える。そうだとすると、システムがエンティティにコンポーネントを追加/削除してフィルターのマッチ可否が変わるとき、同じティックで処理されるかどうかがエンティティIDによって変わるのかが気になる

    • システムの実行順序も気になる。新しいシステムを固定リストに手動で追加しなければならないのは面倒かもしれないが、同時にシステム同士が暗黙に依存していることも多いので、実行順序をコンパイル時に固定することも重要だ
      ドキュメントをざっと見た限りでは、こうした依存関係や順序を明示的に示す方法は見つからず、このエンジンがそれをどう扱うのか気になる
  • このフレームワークで作られたジャムゲームの Itchページ とダウンロード: https://saint11.itch.io/neo-city-express
    72時間のジャムゲームとしては印象的だ。アートと文章が良く、予想外の形でメカニクス面の面白さもある

  • とても良い。エディターがすごくスタイリッシュで気に入った。MonoGame は性能が良くクロスプラットフォームなので昔から好きだったが、大きなゲームは作ったことがなく、たまにデモを作った程度だった

  • 良さそう。C#ゲーム開発でGCの一時停止問題があるのか気になる

    • 簡単なオブジェクト管理と、シミュレーション遅延の小さな倍数間隔で GC.Collect() を明示的に呼ぶ方法でかなりうまくいった。最適点はシーン内容とゲームプレイのスタイル、つまりシーン内オブジェクトがどう変化するかによって変わるようだ
      Q3Aスタイルのシーンとゲームプレイでは非常に堅牢だ。ティックごとに変わるシーン要素がほとんどないため、GCの一時停止はほぼ無視できる
      .NET 6+では、DIYエンジンで戦略的に高速反復呼び出しを行うと、GCの一時停止は1〜5ms程度と測定された。プロジェクト設定で同時/サーバー/バックグラウンドGCをオフにし、フォアグラウンド+ワークステーションGCを使うほうがジッターは最も低かった
      選択肢はメモリを100%自前で管理するか、ゴミをできるだけ頻繁に片付けるかだけに見える。最近の.NETでは、低レベルDLLハックのような黒魔術なしにGCを完全に止めるのはほぼ不可能だ。業務イベントやゲームラウンドの合間にプロセスを再起動できるなら、Process.Exit() も一部の領域では有効なGC手法だ
    • ある。Miguel de IcazaがゲームエンジンにC#を追加した歴史と、Swiftの参照カウントがGCの一時停止問題を避けると主張しつつ、Godotで Swift を使うことに期待する理由を扱った良い講演がある
      https://youtu.be/tzt36EGKEZo?si=WNxwcTPGFbJABKez
    • GC問題はほぼ Unity 側だけにあると思う。Strideのように通常の.NETを使う他のゲームエンジンは問題なく動作する
    • ある。UnityはもちろんUnrealにもGCがあるので、開始時点で割り当ててオブジェクトプーリングを使う必要がある
    • ほとんどの他の言語と同じように、C#も割り当てを避けるように書ける
  • リンクを読んだだけではよく分からないが、Murderゲームエンジンで F#ゲーム を作るのがどれほど難しいのか気になる

  • UnityでECSを少し使ったことがあるが、MurderのECSのほうがずっと簡単だった。開発者たちは本当によく作っている
    Murderで小さなアーケードゲームのプロジェクトを作っていて、ここでプレイできる: https://nopetrides.itch.io/bombs-away

    • 違いをもう少し詳しく説明してもらえる?
  • saint11の紹介ページにはこう書かれている: “Murder Engine: 2D Pixel art C# ECS Game Engine made by Isa! I usually help on the render and physics side of it.”
    Isa: https://isadorasophia.com/projects/

  • ゲームエンジンとは関係ないが、悪意のある人が「例のハッカー系サイトの人たちがmurderについて議論している」と言えてしまう点が面白い
    最近、こういう完全に無害な資料を執拗な敵対者がどう利用できるかをよく考えるようになった

    • ちょっと無理がある気もするが、The Onionの記事を文字通りに受け取った人たちも実際にいる
      それでも、これほど簡単に反論できる場合なら、「人々がmurderを議論している」という表現と露骨な嘘との間に大きな違いがあるのかは分からない
    • こういうふうに、ただし逆向きに考えることが、マスメディアのニュースを消費する唯一の方法だ。最近は何もかもが信じがたいほど偏っていて馬鹿げている
  • ECSって何?

    • エンティティ・コンポーネント・システムのことだと思う。ゲームエンジンで一般的なアーキテクチャだ
    • 最近流行している高性能アーキテクチャだ。Unityが最近かなり普及させようとしている