개요
FPS 템플릿은 애플리케이션 스크립트를 세 가지 기본 레이어로 나누어집니다:
- 게임: 스크립트 인스턴스는 애플리케이션이 실행되는 동안 유지됩니다.
- 씬: 스크립트 인스턴스들은 단일 씬에서만 존재합니다. 그리고
- 시뮬레이션: 단일 Quantum 시뮬레이션에 관련이 있는 스크립트 인스턴스입니다.
이러한 분리는 주요 유니티 클래스 섹션에서 명확하게 확인할 수 있습니다.
주요 유니티 클래스
Game
: 주 진입점이며 초기화, 초기화 해제 및 틱 표시를 담당합니다.Game Services
: 글로벌 서비스(단일 인스턴스, 항상 사용 가능)에 대한 참조를 보유합니다.Log
: 사용자 지정 로깅SceneDirector
: 씬 객체의 초기화, 초기화 해제 및 틱 표시를 담당하며 씬 서비스에 대한 참조를 보유합니다.GameplayDirector
: Scene Director에서 상속되고 시뮬레이션 컨텍스트를 참조하며 시뮬레이션의 이벤트에 반응합니다.SimulationContext
: 단일 시뮬레이션과 관련된 데이터를 보유하며, 시뮬레이션 컨텍스트 서비스에 대한 참조를 보유합니다.Gameplay Info
: 단일 시뮬레이션을 실행하는 데 필요한 모든 정보가 포함되어 있습니다.Entity
: 특정 Quantum 엔티티에 대한 유니티 카운터파트를 나타내고, 엔티티에 대한 필수 데이터를 보유, 변환 동기화를 관리, 엔티티 컴포넌트에 대한 참조를 보유하며, 틱을 관리합니다.EntityComponent
: 특정 Quantum 컴포넌트 또는 유니티 전용 컴포넌트에 대한 유니티 카운터파트를 나타냅니다.Register
: 유니티 쪽에서 자주 사용되는 캐시된 속성을 담고있습니다.
게임 서비스
Analyzer
: 성능 기록 및 분석을 위한 게임 서비스Network
: Photon Realtime의 연결을 관리하는 게임 서비스Messages
: Photon Chat과의 연결을 유지하는 게임 서비스Party
: 파티 관리를 위한 게임 서비스 (Messages
필요)Lobby
: 커스텀 로비 연결을 위한 게임 서비스 (Messages
필요)Matchmaking
: 매치를 찾고 룸과의 연결을 관리하는 게임 서비스(Network
그리고Messages
필요)RemoteSettings
: 유니티 원격 구성을 위한 게임 서비스입니다.SceneLoader
: 씬 로딩을 위한 게임 서비스
씬 서비스
SceneInput
: 장치의 입력을 폴링하고 시뮬레이션으로 전송하기 위한 씬 서비스SceneCamera
: 카메라 관리를 위한 씬 서비스SceneUI
: UI 관리를 위한 씬 서비스SceneAudio
: 오디오 관리를 위한 씬 서비스SceneMatchmaking
: 특정 매치 메이킹 프로세스를 실행하기 위한 씬 서비스SceneCache
: 객체를 캐싱하기 위한 씬 서비스
시뮬레이션 컨텍스트 서비스
Simulator
: Quantum 시뮬레이션을 틱하는 시뮬레이션 컨텍스트 서비스Events
: Quantum 이벤트에 등록/등록 취소하기 위한 시뮬레이션 컨텍스트 서비스Callbacks
: Quantum 콜백에 등록/등록 취소하기 위한 시뮬레이션 컨텍스트 서비스Entities
: Quantum ⇔ Unity 동기화를 위한 시뮬레이션 컨텍스트 서비스로 엔티티 초기화, 초기화 해제 및 티킹을 담당합니다.Replay
: 주요 시뮬레이션을 기반으로 리플레이 시뮬레이션을 유지하는 시뮬레이션 컨텍스트 서비스Register
: 로컬 플레이어에 대한 정보를 포함하고 자주 액세스하는 참조(엔티티/컴포넌트)를 캐시하고 예측 영역을 설정하는 시뮬레이션 컨텍스트 서비스
뷰 아키텍쳐 그림
주요 Quantum 클래스
주요 Quantum 클래스들은 모두 시뮬레이션 레이어의 일부분입니다.
Generic Quantum
다음 섹션에서는 FPS 템플릿에 사용되는 일반 Quantum SDK의 기본 클래스를 다룹니다.
데이터 구조
Globals
: 글로벌 데이터용 상태 데이터를 가지고 있습니다Map
: 베이크된 맵 데이터와 사용자 지정 맵 에셋에 대한 참조를 포함합니다.Signals
: 시그널 발생을 위해 사용Events
:이벤트 발생을 위해 사용RNG
: 난수 생성기FrameContext
: 여러 프레임에 걸쳐 공유되는 데이터를 포함하고 있으며, FrameContextUser에 대한 참조를 보유FrameContextUser
: 사용자 지정 사용자 데이터를 포함
시스템
CullingSystem3D
: Culling을 위한 기본 Quantum 시스템PhysicsSystem3D
: 3D 물리용 기본 Quantum 시스템NavigationSystem
: 내비게이션용 기본 Quantum 시스템
Framework 특유성
FPS 템플릿은 자체 인프라를 사용하여 Quantum SDK를 확장합니다. 가장 중요한 클래스는 아래에 나와 있습니다.
데이터 구조=
Gameplay
: 게임플레이 시스템의 상태 데이터를 보유Teams
: 팀 시스템의 상태 데이터를 보유
시스템
ActorSystem
: 일반 엔티티 로직을 실행하기 위한 시스템MapEntitiesSystem
: 맵 엔티티 관리를 위한 시스템PredictionAreaSystem
: 예측 영역 관리를 위한 시스템ResetComponentDesiresSystem
: 모든 컴포넌트가 원하는 구조를 재설정하기 위한 시스템PreProcessComponentDesiresSystem
: 컴포넌트 요건을 조기에 변경하기 위한 시스템PostProcessComponentDesiresSystem
: 컴포넌트 요구를 늦게 변경하는 시스템AISystem
: 엔티티 AI 계산용 시스템PlayerSystem
: 플레이어 관리용 시스템AttributesSystem
: 엔티티 속성 계산용 시스템LookSystem
: 엔티티 모양을 위한 시스템MovementSystem
: 엔티티 이동용 시스템BodySystem
: 엔티티 바디 관리용 시스템AutoTargetSystem
: 자동 타겟 엔티티 룩업용 시스템EffectsSystem
: 엔티티 효과 관리용 시스템ProjectilesSystem
: 발사체용 시스템WeaponsSystem
: 무기 관리용 시스템AbilitiesSystem
: 엔티티 능력 관리용 시스템InteractionsSystem
: 엔티티 상호작용용 시스템ControlsSystem
: 제어 가능한 엔티티 조작용 시스템GameplaySystem
: 게임 플레이 상태 관리용 시스템HitSystem
: 히트 해결 및 계산용 시스템HealthSystem
: 체력/방어 관리용 시스템TeamsSystem
: 팀 관리용 시스템NavigatorSystem
: 복잡한 3D 내비게이션용 시스템