게임에서 플레이어와 적 AI를 구현하기 시작했지만 구성 요소 기반 게임 아키텍처에서이를 가장 잘 구현하는 방법에 대해 혼란스러워합니다.
고정되어 달리고 칼을 휘두를 수있는 다음과 같은 플레이어 캐릭터가 있다고 가정 해 봅시다. 플레이어는 정지 상태와 달리기 상태 모두에서 스윙 소드 상태로 전환 할 수 있지만 플레이어가 서 있거나 뛰어 다니기 전에 스윙을 완료해야합니다. 스윙 중에는 플레이어가 걸을 수 없습니다.
내가 알듯이 두 가지 구현 방법이 있습니다.
- 모든 플레이어 로직을 포함하는 단일 AI 구성 요소를 만듭니다 (실제 구성 요소에서 분리되거나 PlayerAIComponent로 포함). 플레이어 엔터티를 구성하는 개별 구성 요소간에 연결을 만들지 않고 상태 제한을 적용하는 방법을 쉽게 할 수 있습니다. 그러나 AI 구성 요소는 분해 할 수 없습니다. 예를 들어 서서 만 걸어 다닐 수 있거나 걸어 다닐 수 있고 때로는 칼을 휘두르는 적이 있다면 새로운 AI 구성 요소를 만들어야합니다.
- 구성 요소에서 동작을 분리하여 각각 특정 상태를 식별합니다. 그런 다음 StandComponent, WalkComponent 및 SwingComponent를 얻습니다. 전환 규칙을 시행하려면 각 구성 요소를 연결해야합니다. SwingComponent는 스윙 기간 동안 StandComponent 및 WalkComponent를 비활성화해야합니다. 가끔씩 만 서서 칼을 휘두르는 적이있을 때 SwingComponent가있는 경우에만 WalkComponent를 비활성화해야합니다. 이것은 더 나은 믹스 앤 매치 구성 요소를 허용하지만, 종속성이 추가 될 때마다 유지 관리의 악몽을 초래할 수 있지만, 기존 구성 요소는 캐릭터에 대한 종속성의 새로운 요구 사항에 따라 잘 재생되도록 업데이트되어야합니다.
이상적인 상황은 디자이너가 한 줄의 엔진 또는 스크립트 코드를 건드리지 않고도 구성 요소를 컨테이너로 드래그하여 새로운 적 / 플레이어를 만들 수 있다는 것입니다. 스크립트 코딩을 피할 수는 없지만 가능한 한 간단하게 유지하고 싶습니다.
요약하자면, 모든 AI 로직을 하나의 컴포넌트로 작성하거나 각 로직 상태를 별도의 컴포넌트로 분리하여 엔티티 변형을 더 쉽게 만들어야합니까?
편집 : 나는 첫 번째와 두 번째 상황에 대한 의미에 혼란이 있다고 생각합니다. 아래 다이어그램에서 설명하려고했습니다.
개별 상태와 엔티티 간의 관계에 유의하십시오. 첫 번째 상황에서는 AI 구성 요소가 엔티티에 넣기 전에 사전 빌드됩니다. 디자이너는 프로그래머가 사용할 수있는 고유 한 AIComponent 세트 만 선택할 수 있습니다. 두 번째 상황은 다른 구성 요소와 같은 수준에서 다른 상태입니다. 디자이너는 이제 프로그래머의 간섭없이 고유 한 AI로 개체를 만들 수 있습니다.
문제는 이것들이 컴포넌트 기반 엔터티에서 AI를 구조화하는 유일한 두 가지 옵션이며, 그렇다면 최대의 유연성을 제공하는 것은 무엇입니까?