EnTT지금까지 꿈이었고, 우리는 지금까지 단일 버그를 찾지 못했고 작업하기가 매우 쉽습니다.- 모든 ENT 사용자
EnTT 는 게임 프로그래밍을위한 헤더 전용, 작고 사용하기 쉬운 라이브러리이며 현대 C ++ 로 훨씬 더 많이 작성되었습니다.
그중에서도, 그것은 Minecraft 에서 Mojang, Esri의 Arcgis 런타임 SDK 및 Amazing Ragdoll 에서 사용됩니다.
목록에 프로젝트가 표시되지 않으면 문제를 열거나 PR을 제출하거나 주제 에 #ENTT 태그를 추가하십시오! ?
변경 사항을 따라 잡고 싶습니까? 아니면 문제를 열지 않아도되는 질문이 있습니까?
Gitter 채널과 Discord 서버에 가입하고 당신과 같은 다른 사용자를 만나십시오. 우리가 더 많을수록 모든 사람에게 더 좋습니다.
FAQ와 위키도 확인하는 것을 잊지 마십시오. 귀하의 답변은 이미있을 수 있습니다.
EnTT 지원 하시겠습니까? PayPal을 통해 스폰서가 되거나 기부를하는 것을 고려하십시오.
이 사람들에게 감사의 말씀을 전하며 특별한 감사를드립니다.


엔티티 구성 요소 시스템 ( ECS 라고도 함)은 주로 게임 개발에 사용되는 건축 패턴입니다. 자세한 내용 :
이 프로젝트는 순수한 엔티티 구성 요소 시스템으로 시작되었습니다. 시간이 지남에 따라 점점 더 많은 클래스와 기능이 추가됨에 따라 코드베이스가 증가했습니다.
다음은 오늘날 제공하는 내용에 대한 간단하면서도 불완전한 목록입니다.
constexpr 유틸리티. 이 목록을 프로젝트뿐만 아니라 진행중인 작업을 고려하십시오. 전체 API는 그것을 읽을만큼 용감한 사람들을 위해 코드 내에서 완전히 문서화되어 있습니다.
모든 도구는 이제 DLL 친화적이며 경계를 가로 질러 원활하게 실행됩니다.
가장 알려진 한 가지는 EnTT 마인 크래프트 에서도 사용된다는 것입니다.
게임이 문자 그대로 어디에서나 사용할 수 있다는 점을 감안할 때, 라이브러리가 떠오를 수있는 모든 플랫폼에서 도서관이 충분히 테스트되었다고 자신있게 말할 수 있습니다.
# 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 옵션을 설정하여 릴리스 모드 (컴파일러 최적화를 활성화하기 위해 benchmark 테스트)를 컴파일 할 수 있습니다. ON 다음 결과에 만족하는지 여부를 스스로 평가하십시오.
또한 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 에서와 같이 (add_subdirectory에서와 같이) 찾기에 필요한 모든 것을 제공하거나 ( FetchContent 에서와 같이) CMake 포함하는 많은 방법으로 사용하거나 사용합니다.
가능한 모든 사례를 다루려면 간단한 ReadMe 파일이 아니라 논문이 필요하지만이 섹션을 읽는 사람이라면 누구나 문제가없는 CMake 프로젝트에서 EnTT 사용할 수 있다고 확신합니다.
CMake 사용할 때 옵션 ENTT_INCLUDE_NATVIS 옵션을 활성화하고 즐기십시오.
그렇지 않으면 대부분의 도구는 Natvis를 통해 다루어지고 모든 파일은 natvis 디렉토리에서 모듈로 나눈 값을 찾을 수 있습니다.
오류를 발견하거나 제안이 있으면 모든 기여를 환영합니다!
EnTT 가장 유명한 포장 도구에 사용할 수 있습니다. 특히:
Conan , 개발자를위한 C/C ++ 패키지 관리자.
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://github.com/build2-packaging/entt.git 또는 ssh://[email protected]/build2-packaging/entt.git 로 액세스 할 수 있습니다. 이 패키지의 문제를 자유롭게보고하십시오.
둘 다 bpkg add-repo 와 함께 사용하거나 프로젝트 repositories.manifest 에 추가 할 수 있습니다. 자세한 내용은 공식 문서를 참조하십시오.
bzlmod , 바젤의 외부 종속성 관리 시스템.
bazel 프로젝트에서 entt 모듈을 사용하려면 MODULE.bazel 파일에 다음을 추가하십시오.
bazel_dep ( name = "entt" , version = "3.12.2" ) ENTT는 이제 @entt ( @entt//:entt )로 사용할 수 있습니다. cc_* RUL 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, 제안 및 피드백에 대한 요청은 높이 평가됩니다.
당신이 당신의 경험으로 프로젝트에 도움을 줄 수 있고 다른 이유로 프로젝트의 일부를 얻고 싶다면, 저에게 직접 연락하십시오 (프로필에서 메일을 찾을 수 있음).
나는 각각의 모든 기부금이 받아 들여질 것이라고 약속 할 수는 없지만 가능한 빨리 그들을 모두 가져 가기 위해 최선을 다할 것이라고 확신 할 수 있습니다.
참여하기로 결정한 경우 문제를 만들거나 요청을 가져 오기 전에 기부하기위한 지침을 참조하십시오.
또한 기고자 목록을 살펴보고 지금까지 누가 참여했는지 알 수 있습니다.
코드 및 문서 저작권 (C) 2017-2024 Michele Caini.
다채로운 로고 저작권 (C) 2018-2021 Richard Caseres.
MIT 라이센스에 따라 릴리스 된 코드.
CC에 의해 4.0에 의해 발표 된 문서.
CC By-SA 4.0에 따라 출시 된 모든 로고.