This document is about: QUANTUM 2
SWITCH TO

씬 서비스

개요

씬 서비스는 씬의 특정 문제/기능 요건을 해결하는 씬 관련 시스템입니다. 씬 서비스는 완전히 선택 사항으로 설계되어 있습니다(일부는 다른 서비스에 의존할 수도 있음). 따라서 씬마다 고유한 씬 서비스를 설정할 수 있습니다. 씬에는 최대 한 개의 활성 서비스 인스턴스가 있습니다. 씬 서비스는 연결된 씬만큼 오래 지속됩니다.

SceneService는 단일 SimulationContext 인스턴스를 참조하고 다음 멤버들을 구현하기 위해 준비됩니다.

  • Scene: SceneDirector의 참조
  • Context: 현재 등록된 SimulationContext의 참조
  • SetContext(): 로컬로 SimulationContext 를 캐시하고 OnSetContext() 호출
  • ClearContext(): OnClearContext()를 호출하고 로컬에 캐시된 SimulationContext 제거
  • OnInitialize(): 가상 함수, 씬 서비스 초기화 단계에서 씬 로드 후 호출
  • OnDeinitialize(): 가상 함수, 씬 초기화 단계에서 씬 언로드 전에 호출
  • OnSetContext(): 가상 함수, 일반적으로 Quantum 시뮬레이션을 시작한 후 SetContext()에서 호출됩니다. 컨텍스트는 단일 씬에서 여러 번 전환 가능
  • OnClearContext(): 가상 함수, 일반적으로 Quantum 시뮬레이션이 수행되거나 씬 언로드 전에 ClearContext()에서 호출

다음 코드는 사용 방법을 보여줍니다:

C#

public unsafe sealed partial class SceneAudio : SceneService
{
    protected override void OnInitialize()
    {
        // One-time initialization

        _musicAudioSource = GetComponent<AudioSource>();
        _musicAudioSource.enabled = true;
    }

    protected override void OnDeinitialize()
    {
        // Clean-up
        
        StopAllCoroutines();

        _currentPlayingSetup = null;
        _playMusicRoutine    = null;
        _stopMusicRoutine    = null;

        _musicAudioSource.enabled = false;
    }

    protected override void OnSetContext()
    {
        // Subscribe events, refresh the service based on current gameplay state - to correctly synchronize game => replay => game switches

        Context.Events.GameplayStateChanged += OnGameplayStateChanged;

        OnGameplayStateSet(Context.VerifiedFrame.Gameplay->CurrentState);
    }

    protected override void OnClearContext()
    {
        // Unsubscribe events

        Context.Events.GameplayStateChanged -= OnGameplayStateChanged;
    }
}

자세한 내용은 FPS 템플릿 매뉴얼의 게임 아키텍처 섹션에 있는 SimulationContext 페이지를 참조하십시오.

UI

SceneUI는 UI 관리를 담당합니다. 이것은 UIViewsUIWidgets의 상호 연결된 모음집입니다. SimulationContext 전환의 경우 활성 SimulationContext가 이러한 형식으로 전달되고 각 UIView 인스턴스는 주어진 시뮬레이션 상태에 따라 내부 상태를 올바르게 동기화합니다.

구체적인 구현은 씬에서 도출되었습니다.UI는 활성 씬에 추가 로드되는 별도의 씬 활성 씬의 SceneUI에는 특정 씬에 필요한 UIViews 목록이 포함되어 있습니다. 각 뷰는 팀 친화적인 워크플로우의 프리팹으로 제공됩니다. 특정 게임 상태나 플랫폼(모바일/VR 등)에 대해 어떤 UIViews가 표시되어야 하는지 정의할 수도 있습니다. 예를 들어, GameplayUI는 제공된 시뮬레이션에서 게임 플레이 상태를 조사합니다.

다음 다이어그램은 FPS 템플릿에 포함된 기본 UI 구성을 보여줍니다.

fps template scene ui
FPS 템플릿 씬 UI.

입력

SceneInput은 능동적인 플랫폼 입력 관리, 입력 동작 등록, 원하는 동작 실행 및 Quantum 시뮬레이션에 입력 값 제공을 담당합니다.

다음 그림은 다양한 씬과 입력 장치에 대한 입력 처리 방식을 보여줍니다.

fps template scene input
FPS Template Scene Input flow.

매치메이킹

SceneMatchmaking은 게임 디자인의 관점에서 매치메이킹 과정을 진행하는 역할을 합니다(예: 플레이어가 새로운 매치를 만들기 전에 매치에 참여하려고 하는 기간). 이 서비스는 임의의 매치를 결합하거나 만들 수 있는 기본적인 매치메이킹 기능을 제공합니다.

FPS 템플릿은 두 가지 서비스 변형을 지원합니다. 이러한 항목은 SceneMatchmaking에서 파생되었으며 사용자 지정 구현을 위해 재정의되어야 합니다.

  • MenuMatchmaking: 특정 씬이 로드되기 전에 메뉴에서 매치메이킹이 발생합니다.
  • GameplayMatchmaking: 이미 로드된 게임 씬에서 매치메이킹이 이뤄집니다. 이것은 매치메이킹 규칙에 반영됩니다.

다음 다이어그램은 메뉴 씬의 매치메이킹 프로세스의 간단한 예입니다.

fps template matchmaking in the menu scene
메뉴 씬(간단)에서의 FPS 템플릿 매치메이킹.

다음 다이어그램은 게임 씬에서 발생하는 보다 복잡한 매치메이킹 프로세스의 예제입니다:

fps template matchmaking in gameplay scene
메뉴 씬(복잡)에서의 FPS 템플릿 매치메이킹.

카메라

SceneCamera는 카메라의 적극적인 관리와 전환을 책임지고 있습니다. 모든 카메라는 특정 CameraBehavior 구현의 결과로 정의됩니다. 한 번에 하나의 CameraBehavior만 활성화할 수 있습니다. 기본적으로 FPS 템플릿은 다양한 CinemachineVirtualCamera 설정 및 간단한 전환을 통해 공유된 CameraBehavior 구현을 사용합니다.

다음 다이어그램에는 FPS 템플릿에 포함된 카메라 타입/행동이 나와 있습니다.

fps template scene input
FPS 템플릿 씬 카메라 흐름.

캐시

SceneCache는 런타임 프리팹 풀링을 담당합니다. 정적 구성(드래그 & 드롭 프리탭 및 편집기의 설정 횟수), 런타임 준비, 인스턴스 제한 및 인스턴스가 여전히 시각적인 행동이 실행 중인 경우 지연된 리턴을 지원합니다.

C#

GameObject impactInstance = Context.Scene.Cache.Get(_impact);
if (impactInstance != null)
{
    Context.Scene.Cache.ReturnDeferred(impactInstance, 1.0f);
}

오디오

SceneAudio는 음악 재생과 음향 효과를 담당합니다. 특정 게임 플레이 상태에 따라 다른 오디오 클립을 정의할 수도 있습니다.

Back to top