한 가지 방법. 액션이나 RPG 캐릭터가 가질 수있는 측면의 예는 Health, Mana, WearsEquipment, UsesItems, MobileObject, PhysicalRigidbody, MeleeAttackPerformer, RangedAttackPerformer, MagicAttackPerformer, PlayerControlledMobile, AIControlledMobile, AudioSource 등등과 같은 것들입니다. 클래스는 공통 기반 (예 : AspectMixin 또는 그런 것.
이러한 각 클래스를 믹스 인으로 취급하면 해당 액터 유형에 적합한 측면을 가진 새로운 아키타 입을 만드는 데 많은 유연성을 얻을 수 있습니다. 예를 들어, 몬스터와 플레이어는 자신이 건강을 가지고 있다는 사실을 공유 할 수 있지만 AI 컨트롤과 플레이어 컨트롤을 제어하는 클래스가 다릅니다. 또한, 건강 측면을 고정 된 물체 (예 : 배럴)에 추가하여 손상의 영향을받을 수 있습니다.
이를 위해 아키타 입체 객체는 해당 아키 타입에 대한 aspect mixins 목록을 저장합니다. 또한, 측면은 유형 (또는 인터페이스)별로 다른 측면의 주요 객체를 쿼리 할 수 있어야합니다. 설정하는 데는 약간의 작업이 필요하지만 이는 유연성의 대가입니다.
FWIW, 이것은 Unity Engine이 권장하려고하는 접근 방식입니다 (동일한 개념에 대해 MonoBehavior : behavior..aspect ... 다른 단어라고 생각하십시오). 그러나 많은 개발자가 그들은 클래스가 신속하게 모 놀리식이되는 몇 가지 실패한 프로토 타입을 만들었습니다.
원래 질문으로 돌아가려면 재생할 수있는 클래스의 수와 AI가 같은 클래스의 문자를 제어 할 수 있는지 여부에 따라 다릅니다. 그렇다면 캐릭터의 컨트롤을 추상화 한 다음 AIControls 및 PlayerControls를 컨트롤에서 파생시키는 것이 가장 좋습니다.이 중 하나는 캐릭터 클래스와 인터페이스 할 수 있습니다.
반면에 AI 유형이 몇 가지 다양한 행동 (공격적인 몬스터, 평화로운 NPC)으로 나뉘어 질 수 있다면, 나는 각면을 하나의 측면으로 만들 것입니다.
나는 AI에 대한 인터페이스를 사용합니다 ...그런 식으로 KnightCharacter가 상속됩니다. AI 클래스를 코딩해야 할 때 AI 인터페이스를 구현합니다. –
위의 Martin과 같지만 AICharacter가 능력이라면 인터페이스 여야합니다. 상속은 하위 클래스가 최상위 클래스로 정의됩니다. 인터페이스 구현은 클래스가 인터페이스를 수행 할 수있는 것으로 정의됩니다. 귀하의 경우 기사는 AIMovement를 수행 할 수있는 캐릭터입니다. – Everts