/Promete

Fast and Dead Simple 2D Game Engine for .NET

Primary LanguageC#MIT LicenseMIT

Promete

Nuget

Warning

Prometeは現在、ベータ版です。
プロダクション用途でもご利用いただけますが、意図しない不具合が起こる可能性があります。
実際のアプリケーション開発に利用する場合は、バグにご注意ください。

最新のサポート ポリシーもご確認ください。

Promete は、.NET 8以降を対象とするゲーム開発フレームワーク、ゲームエンジンです。

2Dグラフィクスに特化したシンプルなAPI、高速な動作、充実した機能、高い拡張性を持ちます。

その名は、ギリシャ神話に登場する神「プロメテウス」に由来します。プロメテウスは、土を捏ねて人間を産み出し、火を盗んで人間に与えたとされます。
そうしたプロメテウスのように、クリエイターに力を与え、作品に命を吹き込む存在でありたいという願いが、このエンジンには込められています。

特徴

シンプルなAPI

簡潔なエントリポイントからはじめる、シンプルなAPIを提供します。

var app = PrometeApp.Create()
	.Use<Keyboard>()
	.Use<Mouse>()
	.Use<ConsoleLayer>()
	.BuildWithOpenGLDesktop();

app.Run<MainScene>();

public class MainScene
{
	private readonly Keyboard _keyboard;
	private readonly ITexture _texture1;
	private readonly ITexture _texture2;

	public MainScene(Keyboard keyboard)
	{
		_keyboard = keyboard;
		texture1 = window.TextureFactory.Load("./texture1.png");
    	texture2 = window.TextureFactory.Load("./texture2.png");

		Root = new Container
		{
			new Sprite(texture1, location: (16, 16)),
			new Sprite(texture2, location: (16, 32)),
		};
	}

	public override void OnUpdate()
	{
		if (_keyboard.Escape.IsKeyDown)
		{
			Window.Close();
		}
	}
}

クロスプラットフォーム

Windows だけでなく、macOSやLinuxでも動作します。 また、将来的にはAndroidやiOS、Webでも動作する予定です。

デフォルトの描画バックエンドはOpenGLを使用していますが、将来的にはVulkanやMetalなどのAPIをサポートし、より高速な描画を実現する予定です。

2Dに特化したグラフィックシステム

ピクセルパーフェクトな2Dグラフィックを気軽に実現できるゲームエンジンはそう多くありません。 Prometeは、2Dグラフィックに特化したグラフィックシステムを提供します。

Prometeでは、ノードという描画単位を用いた階層構造で画面を構成します。

ノードの一覧:

  • スプライト - 画面上へのテクスチャ表示
  • タイルマップ - テクスチャを敷き詰めたマップ表示
  • シェイプ - シンプルな図形の描画
  • コンテナー - 描画要素を格納できるオブジェクト
  • テキスト - 文字列を描画できるオブジェクト
  • 9スライススプライト - テクスチャを9分割して、矩形状のテクスチャ−をスムーズに引き伸ばせる特殊なスプライト

各種ノードを描画する上で、エンジンに登録された NodeRenderer が用いられます。このレンダラーは特に何もしなくとも標準のものが用いられますが、拡張することも可能です。

拡張性

Prometeは、拡張性を重視して設計されています。

標準の描画機能だけでは足りない場合、独自の NodeRenderer を実装することで、OpenGLを直接用いた独自のレンダリング機能をPrometeと統合できます。

また、オーディオ機能も同様に、定期的にバッファ配列にデータを書き込む IAudioSource の実装を作成することで、標準では足りないオーディオ形式をサポートできます。

オーディオ機能

BGMから効果音まで、ゲームに欠かせないオーディオ機能を提供します。

BGMは特定のポイントを起点としたループ再生に対応しています(これがないエンジンも多い)

デフォルトではogg vorbisおよびwav形式をサポートしています。オーディオファイルの読み込みはプラグインによって拡張可能です。

プラグインシステム

Prometeは、DIコンテナを用いたプラグインシステムを採用しています。

アプリ初期化時に Use<T> メソッドでプラグインを登録することで、その機能が使えるようになります。

キーボードやマウスの入力は、例えばPCでは必要かもしれませんが、スマートフォン等では不要な機能です。 こうした環境の差異を吸収したり、不要な機能を削減して高速化を図れるのが、Prometeのプラグインシステムです。

また、ゲーム開発時にはアセットやパラメータの管理クラスを作る必要がしばしば発生します。 プラグインシステムには任意のクラスを登録することができるので、そういった管理クラスを登録し、シーンをまたいでアクセスする書き方もできます。

サポート プラットフォーム

プラットフォーム サポート状況
Windows テスト済み。開発者自身がWindows 11で動作を確認しています。
macOS テスト済み。開発者自身がmacOS Sequoiaで動作を確認しています。
Linux 動作可能。未テスト
Android まだ対応していません。
iOS まだ対応していません。
Web まだ対応していません。

ビルドの仕方

git clone https://github.com/prometeapp/Promete
cd Promete
dotnet build

ドキュメント

https://promete.app (WIP) 現在、精力的にドキュメントを作成中です。

コントリビュート

コントリビューションの手引き をご確認ください。

GitHub issues GitHub pull requests

サポート ポリシー

サポート ポリシー をご確認ください。

ライセンス

License

Promete はいくつかのサードパーティソフトウェアに依存しています。ライセンスをご確認ください THIRD_PARTIES.md