This document is about: QUANTUM 2
SWITCH TO

컨트롤러

EntityController는 FPS 템플릿에서 게임 플레이를 만드는 핵심입니다. 여기에는 특정 엔티티에 대한 기본 구성이 포함되어 있으며 모든 엔티티에 정확하게 하나의 컨트롤러가 할당됩니다. 모든 컨트롤러는 상태 없음이며 롤백 가능한 데이터는 항상 Quantum 상태(즉, 컴포넌트 안)에 저장됩니다. 씬 엔티티에는 항상 전용 컨트롤러 인스턴스가 있으며 런타임에 엔티티 프로토타입에서 생성된 엔티티는 항상 동일한(프리팹) 컨트롤러 인스턴스를 참조합니다.

컨트롤러는 클래스이며 인터페이스를 구현할 수 있으며, 이는 특정 엔티티의 기능을 확장할 때 권장되는 개발 기법입니다.

컨트롤러는 Quantum 솔루션에서 다음과 같이 생성됩니다:

  1. FPS 템플릿에서 제공하는 기존 컨트롤러에서 파생하고, 실행은 해당 시스템에 의해 주도됩니다 (ActorController - ActorSystem, WeaponController - WeaponsSystem, AbilityController - AbilitiesSystem 등):
    • public class ExplosionController : UpdatableActorController
    • public class ProjectileWeaponController : WeaponController
    • public class GrenadeAbilityController : AbilityController
  2. 기본 EntityController에서 파생합니다. 이렇게 하려면 컨트롤러의 기본 로직을 실행할 사용자 지정 시스템을 만들어야 합니다.

다음 다이어그램에는 일반적인 UpdatableActorController의 인터페이스와 실행 경로가 나와 있습니다.

fps template actor controller
Generic Actor Controller example

다음 그림은 HealthAreaController의 실행 경로입니다:

fps template health area controller example
체력 영역 컨트롤러 예제

다음은 헬스 영역 엔티티 수명 동안 발생하는 내용입니다:

  1. 헬스 영역을 생성할 때 모든 관심 있는 시스템들은( ISignalInitializeEntity 구현) 엔티티 생성의 알림을 받게 됩니다(순서는 SystemSetup에 의해 정의됨).
  2. ActorSystem 은 엔티티 컨트롤러가 ActorController에서 파생되었는지 확인하고 엔티티 컨트롤러에서 Initialize()를 호출합니다.
  3. ActorSystem은 엔티티 컨트롤러가 UpdatableActorController에서 파생되었는지 확인하고 UpdatableActor 컴포넌트를 추가합니다. UpdatableActor 추가/제거는 런타임 시 시스템에 의해 완전히 구동되므로 유니티에서 수동으로 관리할 수 없습니다.
  4. HealthAreaController는 모든 관련 컴포넌트(이 경우 HealthArea)를 추가하고 초기화하는 역할을 합니다.
  5. InteractionsSystem은 엔티티 컨트롤러가 시스템이 담당하는 인터페이스를 구현하는지 확인하고(이 경우 IInteractableTriggerController) InteractableTrigger 컴포넌트를 추가하고 초기화합니다. 이 컴포넌트는 런타임 만이며 InteractionsSystem에서만 처리되지만 외부에서 데이터를 읽을 수 있습니다.
  6. 엔티티가 체력 영역에 진입하는 경우(이는 두 엔티티의 물리 구성에 따라 다름) OnTriggerEnter3D 시그널이 PhysicsSystem3D에서 발생합니다. InteractionsSystem은 신호에 반응하여 트리거 엔티티의 유효 여부를 결정하는 로직이 있는 HealthAreaController로 전달합니다. 허용된 엔티티는 InteractionsSystem 컴포넌트의 InteractionsSystem에 의해 유지됩니다.
  7. 엔티티가 체력 영역을 벗어날 때OnTriggerExit3D에 기반) 또는 엔티티가 파괴되면 InteractionsSystemHealthAreaControllerOnExit()를 호출합니다.
  8. 업데이트될 때마다 ActorSystemUpdatableActor 컴포넌트를 가진 모든 엔티티에 반복되며 해당 컨트롤러에서 Update()를 호출합니다.
  9. 엔티티가 파괴되면 ActorSystemHealthAreaControllerDeinitialize()를 호출하며, 이 호출은 엔티티를 올바르게 정리하는 역할을 합니다.

FPS 템플릿은 엔티티 동작을 확장하는 데 사용할 수 있는 몇 가지 인터페이스를 지원합니다. 이러한 인터페이스는 해당 시스템에서 별도로 설명합니다.

Back to top