엔터티 시스템에서 UI / HUD를 코딩하는 방법은 무엇입니까?


18

나는 이미 Adam Martin (t-machine)에서 영감을 얻은 엔티티 시스템에 대한 아이디어를 얻었습니다. 다음 프로젝트에 이것을 사용하고 싶습니다.

엔터티, 구성 요소 및 시스템의 기본 사항을 이미 알고 있습니다. 내 문제는 UI / HUD를 처리하는 방법입니다. 예를 들어, 퀘스트 창, 스킬 창, 캐릭터 정보 창 등. UI 이벤트를 어떻게 처리합니까 (예 : 버튼 누름)? 이것들은 매 프레임마다 처리 될 필요가없는 것들입니다. 현재 MVC를 사용하여 UI를 코딩하고 있지만 Entity System과 호환되지 않을 것이라고 생각합니다.

엔터티 시스템이 더 큰 OOP에 포함되어 있다는 것을 읽었습니다. UI가 ES 외부에 있는지 여부를 모르겠습니다. 이것에 어떻게 접근합니까?

답변:


17

엔터티 시스템에서 너무 많이 생각하고있을 수 있습니다. 엔터티는 게임에서 캐릭터, 적, 스크립트, 글 머리 기호, 방아쇠 등과 같은 개체의 범위를 지정하기위한 것입니다.

UI를 분리하면 더 좋고 쉬울 것입니다. 엔터티 범위 내에서 모든 것을 만들 필요는 없습니다.


이것은 또한 t-machine에 대한 그의 게시물이나 의견 중 하나에서 Adam Martin이 말한 것입니다. ES는 특정 문제에 대한 솔루션입니다. 게임 (엔진)의 다른 측면을 위해보다 '전통적인'솔루션과 함께 사용할 수 있으며 사용해야합니다.
user8363

감사합니다. ES에 무엇이 있어야하는지 잘 모르겠습니다. 효과적인 UI를 어떻게 코딩합니까? 계층 구조에 문제가 있기 때문에 MVC가 잘리지 않는다고 생각합니다.
Sylpheed

UI에 다른 아키텍처를 사용하기로 동의합니다. 그렇다면 MVC의 문제점은 무엇입니까?
Narek

@Armen MVC에는 문제가 없지만 엔티티 범위에 넣는 것은 문제가 없습니다. 단지 그 이점이 단점을 이길 수 없다는 것입니다. 할 필요가 없습니다 아키텍처 우주 비행사
구스타보 마시 엘

3

엔티티 / 구성 요소 UI가 작동 할 수 있다고 생각하지만 그렇게하기는 어려울 것입니다. 또한 게임 엔터티를 처리하는 데 필요한 구성 요소 및 시스템에서 충분히 제거되었으므로 게임 내의 다른 엔터티 / 구성 요소 시스템 일뿐 입니다. 나는 둘 사이에 많은 중복이있을 것이라고 상상할 수 없다.

엔터티 시스템은 대단하며 어디서나 사용하려고 할 수 있습니다. 결국, 당신은 정말 달콤한 망치를 얻을 때, 당신은 손톱과 같은 모든 문제를 다루고 싶어합니다. 그러나 EC 시스템은 프로그래밍 백의 또 다른 도구입니다. 문제를 해결하는 데 실제로 사용되지만 실제로는 UI와 같은 문제에 대한 더 나은 도구가 있습니다.

상속 구조는 GUI에 정말 효과적입니다. UI 구성 요소를 생성 할뿐만 아니라 배치하기도합니다. UI 구성 요소를 다른 구성 요소의 자식으로 사용하여 위치, 크기 및 불투명도와 같은 속성을 상속받을 수 있다는 것이 정말 좋습니다. EC 시스템으로 설정하려고하면 EC 시스템의 일부 규칙을 위반해야합니다.


1

UI / HUD가 그려 질 때마다 호출되는 새로운 인터페이스 기능을 만들고 사용자 정의 / 스크립트 구성 요소가 해당 기능을 구현할 수 있습니다. 이를 위해서는 IMGUI 시스템 이 필요 합니다 (Google에는 많은 튜토리얼이 있으며 이는 원래 프레젠테이션 일뿐입니다). 이를 통해 창을 고유 한 UI 빌드 구성 요소와 창 프레임 렌더러 구성 요소가있는 엔티티로 만들 수 있습니다.

이 모든 프레임을 처리하지 않기 위해 모든 UI를 다른 버퍼로 렌더링하여 모든 종류의 입력 / 데이터 이벤트에서만 업데이트 할 수 있습니다. 즉, 이벤트가 수신 될 때마다 다음 프레임을 다시 페인트해야한다는 것을 나타 내기 위해 일부 변수가 변경됩니다. 해당 변수가 true이면 변수가 false로 설정되고 그 후에 UI 인터페이스가 호출됩니다. 애니메이션을 원한다면 UI 자체가 다음 프레임의 다시 페인트를 트리거 할 수 있도록이 정확한 순서의 작업을 사용해야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.