EnTTこれまでのところ夢でしたが、これまでに1つのバグを見つけていません。- これまでにすべてのENTTユーザー
EnTTは、ゲームプログラミングのためのヘッダーのみの、小さく使いやすいライブラリであり、最新のC ++で書かれています。
とりわけ、Mojang、 Arcgis Runtime SDKS By Esri、Amazing RagdollによるMinecraftで使用されています。
リストにプロジェクトが表示されない場合は、問題を開き、PRを送信するか、トピックに#EntTタグを追加してください! ?
変更に追いつきたいですか、それとも問題を開く必要がない質問がありますか?
Gitter ChannelとDiscord Serverに参加して、あなたのような他のユーザーに会います。私たちがいればなるほど、誰にとっても良くなります。
FAQとWikiもチェックすることを忘れないでください。あなたの答えはすでにそこにあるかもしれません。
EnTTをサポートしますか?スポンサーになるか、 PayPalを介して寄付をすることを検討してください。
これらの人々に感謝し、特別な感謝:


エンティティコンポーネントシステム( ECSとも呼ばれる)は、主にゲーム開発で使用される建築パターンです。詳細については:
このプロジェクトは、純粋なエンティティコンポーネントシステムとして始まりました。時間が経つにつれて、コードベースはますます多くのクラスと機能が追加されるにつれて成長しました。
これは、今日提供するものの短いが不完全なリストです。
constexprユーティリティ。このリストは、プロジェクトと同様に進行中の作業を検討してください。 API全体は、それを読むのに十分勇敢な人のためのコード内で完全に文書化されています。
すべてのツールもDLLフレンドリーになっており、境界を越えてスムーズに実行していることに注意してください。
最も知られていることの1つは、 EnTTがMinecraftでも使用されていることです。
ゲームが文字通りどこでも利用可能であることを考えると、私は自信を持って、ライブラリが頭に浮かぶ可能性のあるすべてのプラットフォームで十分にテストされていると言うことができます。
# include < entt/entt.hpp >
struct position {
float x;
float y;
};
struct velocity {
float dx;
float dy;
};
void update (entt::registry ®istry) {
auto view = registry. view < const position, velocity>();
// use a callback
view. each ([]( const auto &pos, auto &vel) { /* ... */ });
// use an extended callback
view. each ([]( const auto entity, const auto &pos, auto &vel) { /* ... */ });
// use a range-for
for ( auto [entity, pos, vel]: view. each ()) {
// ...
}
// use forward iterators and get only the components of interest
for ( auto entity: view) {
auto &vel = view. get <velocity>(entity);
// ...
}
}
int main () {
entt::registry registry;
for ( auto i = 0u ; i < 10u ; ++i) {
const auto entity = registry. create ();
registry. emplace <position>(entity, i * 1 . f , i * 1 . f );
if (i % 2 == 0 ) { registry. emplace <velocity>(entity, i * . 1f , i * . 1f ); }
}
update (registry);
}間違った理由でEnTTの開発を開始しました。私の目標は、パフォーマンスとメモリ使用の両方の点で、別のよく知られているオープンソースライブラリに勝つエンティティコンポーネントシステムを設計することでした。
結局、私はそれをしましたが、それはあまり満足していませんでした。実際、それはまったく満足していませんでした。最も速く、それ以上のものはありません。気づいたとき、 EnTTの素晴らしいパフォーマンスを無傷に保ち、自分のライブラリに見たいすべての機能を同時に追加しようと懸命に努力しました。
最近では、 EnTTついに私が探していたものです。競合他社よりも速く、平均的なケースでのメモリの使用量の削減、本当に優れたAPI、驚くべき機能のセットです。そしてもちろん、それ以上。
それが価値があることのために、あなたは私が他のプロジェクトを悪く見せようとしようとしているのを見ることは決してありません。
彼らがそれを楽しんでいるなら、私はこの活動を他の人に任せます(そして、実際にそれが好きな人もいるようです)。私は自分の時間をよりよく利用することを好みます。
興味がある場合は、 CMakeのENTT_BUILD_BENCHMARKオプションを設定することにより、 ONモードでbenchmarkテストをコンパイルすることができます(それはほとんど意味がありません)。
また、比較の基礎としてEnTTを使用するプロジェクトもたくさんあります(これはすでに多くを伝える必要があります)。これらのベンチマークの多くは完全に間違っています。他の多くのベンチマークは不完全で、情報を省略し、特定の機能を比較するために間違った関数を使用するのが得意です。確かに良いものもありますが、特に彼らが扱っている図書館が積極的に開発されている場合、誰もそれらを更新しない場合、彼らはすぐに年をとります。
それらのすべてのうち、これは最新のプロジェクトのように思われ、特定の数のライブラリもカバーしています。 EnTTが正しく使用されているかどうかを正確に言うことはできません。ただし、使用が不十分であっても、読者にどこで動作するのかというアイデアを提供する必要があります。
EnTTはヘッダーのみのライブラリです。これは、 entt.hppヘッダーを含めるだけで、ライブラリ全体を含めて使用するのに十分であることを意味します。エンティティコンポーネントシステムのみに興味がある人の場合は、代わりにSole entity/registry.hppヘッダーを含めることを検討してください。
次の行をファイルの上部に追加することです。
# include < entt/entt.hpp >以下の行を使用して、代わりにエンティティコンポーネントシステムのみを含めます。
# include < entt/entity/registry.hpp >次に、適切な-I引数をコンパイラに渡して、 srcディレクトリをインクルードパスに追加します。
EnTTを使用できるようにするには、ユーザーは少なくともC ++ 17をサポートするフル機能のコンパイラを提供する必要があります。
以下の要件は、テストをコンパイルし、ドキュメントを抽出するために必須です。
CMakeバージョン3.7以降。Doxygenバージョン1.8以降。あるいは、Bazelはビルドシステムとしてもサポートされています(それを維持することを申し出たZaucyのクレジット)。
以下のドキュメントでは、 CMakeを参照してください。これはライブラリの公式ビルドシステムです。
CMakeプロジェクトからEnTT使用するには、既存のターゲットをEnTT::EnTTエイリアスにリンクするだけです。
ライブラリは、検索に必要なものすべて( find_packageなど)、埋め込み( add_subdirectoryのように)、取得( FetchContentのように)、またはCMake含む多くの方法でそれを使用しています。
考えられるすべてのケースをカバーするには、単純なreadmeファイルではなく、論文が必要になりますが、このセクションを読んでいる人は誰でもそれが何であるかを知っており、問題なくCMakeプロジェクトのEnTT使用できると確信しています。
CMakeを使用する場合は、オプションを有効にしてENTT_INCLUDE_NATVIS有効にして楽しんでください。
それ以外の場合、ほとんどのツールはNATVISを介してカバーされており、すべてのファイルはnatvisディレクトリにあるモジュールで分割されています。
エラーを見つけたり、提案をしたりすると、貢献は歓迎されます!
EnTT 、最も有名なパッケージツールのいくつかで利用できます。特に:
開発者向けのC/C ++パッケージマネージャー、 Conan 。
vcpkg 、Microsoft VC ++パッケージングツール。
EnTTをいくつかの簡単な手順にダウンロードしてインストールできます。
$ git clone https://github.com/Microsoft/vcpkg.git
$ cd vcpkg
$ ./bootstrap-vcpkg.sh
$ ./vcpkg integrate install
$ vcpkg install entt
または、 experimental機能を使用して、最新の変更をテストすることもできます。
vcpkg install entt[experimental] --head
vcpkgのEnTTポートは、Microsoftチームメンバーとコミュニティの貢献者によって最新の状態に保たれています。
バージョンが古くなっている場合は、 vcpkgリポジトリで問題を作成するか、リクエストをプルしてください。
MacOSの行方不明のパッケージマネージャー、 Homebrew 。
自家製のフォーミュラとして利用可能。以下を入力してインストールするだけです。
brew install skypjack/entt/entt
build2 、CおよびC ++コードの開発とパッケージング用のビルドツールチェーン。
build2プロジェクトでenttパッケージを使用するには、次の行または同様の行をmanifestファイルに追加します。
depends: entt ^3.0.0
また、構成が有効なリポジトリを指していることを確認して、パッケージがbuild2で見つけることができるようにします。
cppget.org 、オープンソースコミュニティ中央リポジトリ、 https://pkg.cppget.org/1/stableにアクセスできます。
パッケージソースリポジトリ:https: https://github.com/build2-packaging/entt.gitまたはssh://[email protected]/build2-packaging/entt.gitこのパッケージで問題を報告してください。
どちらもbpkg add-repoで使用するか、Project repositories.manifestに追加できます。詳細については、公式のドキュメントを参照してください。
bzlmod 、Bazelの外部依存関係管理システム。
bazelプロジェクトでenttモジュールを使用するには、 MODULE.bazelに以下を追加します。Bazelファイル:
bazel_dep ( name = "entt" , version = "3.12.2" ) ENTTは、 @entt ( @entt//:enttの略)として利用可能になりますcc_*ルールdepsで使用されます。
このリストを進行中の作業と考えて、必要に応じて長くするのを手伝ってください。
EnTT pkg-configもサポートしています(少なくともサポートの一部の定義について)。 entt.pcという適切なファイルが生成され、 CMakeを実行すると適切なディレクトリにインストールされます。
また、これにより、 Mesonなどのツールで使用しやすくなります。
ドキュメントはDoxygenに基づいています。それを構築するために:
$ cd build
$ cmake .. -DENTT_BUILD_DOCS=ON
$ make
APIリファレンスはbuild/docs/htmlディレクトリのHTML形式で作成されます。お気に入りのブラウザでナビゲートするには:
$ cd build
$ your_favorite_browser docs/html/index.html
同じバージョンも最新リリースでオンラインで利用できます。これは最後の安定したタグです。
さらに、ユーザーが関連するすべてのドキュメントページを見つけることができるプロジェクト専用のウィキが存在します。
テストをコンパイルして実行するには、 EnTTはGoogleTestが必要です。
他の何かをコンパイルする前に、ライブラリをcmakeしてコンパイルします。テストを作成するには、 CMakeオプションENTT_BUILD_TESTING ONに設定します。
最も基本的なテストセットを構築するには:
$ cd build$ cmake -DENTT_BUILD_TESTING=ON ..$ make$ make testベンチマークはこのセットの一部ではないことに注意してください。
EnTT 、プライベートおよび商業用アプリケーションで広く使用されています。いくつかの署名がいくつかの署名をかけたため、それらのほとんどについてさえ言及することさえできません。幸いなことに、 EnTTに基づいてオープンソースプロジェクトを実装するのに時間をかけて、それらを文書化することになると控えていなかった人々もいます。
ここでは、リファレンスとして使用できるゲーム、アプリケーション、および記事の不完全なリストを見つけることができます。
EnTTに関する他のリソースを知っている場合は、問題やPRを自由に開いてください。リストに追加することを嬉しく思います。
機能、PR、提案、フィードバックのリクエストは高く評価されています。
あなたが助けて、あなたの経験でプロジェクトに貢献したいと思うなら、または他の理由でプロジェクトの一部を取得したい場合は、直接私に連絡してください(あなたはプロフィールでメールを見つけることができます)。
すべての貢献が受け入れられることを約束することはできませんが、できるだけ早くそれらをすべて服用するために最善を尽くすことを保証できます。
参加することにした場合は、問題を作成したり、リクエストをプルするために、貢献するためのガイドラインをご覧ください。
また、貢献者リストを見て、これまでに誰が参加したかを知りましょう。
コードとドキュメントCopyright(c)2017-2024 Michele Caini。
カラフルなロゴCopyright(c)2018-2021 Richard Caseres。
MITライセンスに基づいてリリースされたコード。
4.0でCCでリリースされたドキュメント。
CC by-sa 4.0でリリースされたすべてのロゴ。