This document is about: QUANTUM 2
SWITCH TO

동적 에셋 주입

Level 4
Available in the Gaming Circle and Industries Circle
Circle

개요

에셋 주입 애드온은 Quantum SDK 위에 구축된 유틸리티 집합으로, 시뮬레이션 중에 Quantum의 동적 데이터베이스에 에셋(맵, EntityProtype, ...)을 결정론적으로 추가할 수 있습니다.

에셋 주입 애드온은 참조 구현을 포함한 일반 프로젝트입니다. 유틸리티 스크립트는 Quantum 2.1 이상을 사용하는 모든 프로젝트에서 사용할 수 있습니다.

노트:

  • 데이터베이스에 주입된 에셋은 런타임에 생성될 수 있습니다(예: 플레이어가 만든 맵).
  • 동적 데이터베이스는 게임 상태의 일부이며 스냅샷의 일부로 나중에 참여한 플레이어에게 전송됩니다. 따라서 나중에 참여한 플레이어에게 추가적인 동기화 코드가 필요하지 않습니다.

다운로드

버전 릴리즈 일자 다운로드
2.1.0 2022년 1월 13일 Quantum asset-injection 2.1.0 빌드 10

Quantum

애드온의 Quantum 측에서는 에셋의 압축, 에셋 주입 명령 정의 및 동적 데이터베이스에 에셋을 수신하고 주입하는 시스템을 처리합니다.

압축

Quantum의 내장 압축 유틸리티는 명령을 통해 전송되는 데이터양을 줄이기 위해 주입된 데이터를 압축하는 데 사용됩니다. 압축은 자동으로 수행됩니다.

InjectAssetCommand

InjectAssetCommand는 결정적으로 다른 플레이어와 데이터를 공유하는 데 사용됩니다. 하나의 명령은 최대 4kB의 데이터를 저장할 수 있습니다. 데이터가 이 제한을 초과하면 에셋이 자동으로 여러 개의 작은 조각으로 분할되어 여러 개의 명령으로 전송됩니다. 명령은 서버에 의해 특정 항목에 연결되므로 시뮬레이션 프레임 당 하나의 명령만 수신할 수 있습니다. 이렇게 하면 분할된 명령의 양에 따라 동일한 틱을 기다려야 하므로 시뮬레이션에서 지연이 발생합니다.

InjectionSystem

InjectAssetSystemInjectAssetCommands를 처리하고 Quantum의 동적 데이터베이스에 에셋을 주입합니다. 에셋이 여러 명령을 통해 전송된 경우 InjectAssetSystem은 각 부분 명령의 데이터 부분을 저장합니다. 모든 명령어가 수신되면 에셋이 재조립되고 데이터베이스에 주입됩니다.

유니티

프로젝트의 유니티 측면에는 명령을 보내는 방법이 표시됩니다.

명령어를 통해 에셋 전송하기

AssetInjectionUtility는 시뮬레이션의 동적 데이터베이스에 주입되는 Quantum 에셋의 모든 유형을 전송하는 데 사용됩니다. 필요한 매개 변수를 사용하여 InjectAsset()메소드를 호출하고 AssetInjectionUtility는 필요한 경우 대용량 데이터를 여러 명령으로 분할하는 것을 포함하여 나머지를 처리합니다.

C#

    public static void InjectAsset(QuantumGame game, PlayerRef player, string assetName, byte[] data);

특수 에셋

Quantum을 사용할 때 사용되는 두 가지 일반적인 특수 에셋은 맵 및 엔티티 프로토타입 에셋입니다. 이러한 유형의 에셋을 쉽게 직렬화하고 역직렬화할 수 있도록 다음 두 가지 유틸리티가 추가로 제공되었습니다.

  • MapUtlity는 시뮬레이션 에셋에서 유니티 에셋을 만드는 데 사용할 수 있습니다.
  • MapUtlity는 엔티티 프로토타입의 직렬화/역직렬화에 사용할 수 있습니다.

예를 들어, 이러한 유틸리티는 사용자가 생성한 콘텐츠로 작성된 엔티티 프로토타입을 처리하는 데 사용할 수 있습니다.

누가 에셋을 주입할 수 있습니까?

일반적으로 누구나 InjectAssetCommand를 전송하여 데이터베이스에 모든 종류의 에셋을 주입할 수 있습니다. 애드온 패키지에 제공된 예에서는 누구나 맵 에셋을 주입할 수 있지만 특정 플레이어 한 명만이 새 맵을 활성화 할 수 있습니다.

주입된 에셋의 주입이나 조작을 어느 정도 제한해야 하는 경우, 그렇게 할 수 있는 참가자는 시뮬레이션에서 결정적으로 식별되어야 합니다. 예를 들어 각 플레이어의 RuntimePlayer에 플래그를 설정할 수 있습니다. 플레이어는 동적 데이터베이스에서 에셋을 주입 및/또는 조작할 수 있는지를 지정합니다.

결정론적으로 생성된 에셋 주입하기

Quantum 내부 시드로부터 결정론적으로 생성된 맵과 같이 결정론적으로 생성된 에셋의 경우, 명령어를 통해 전송하지 않고 시뮬레이션 내에서 직접 DB에 에셋을 주입할 수 있습니다.

알려진 제약사항

에셋에 다른 에셋에 대한 참조가 포함되어 있는 경우(DB에 없는) 참조 에셋도 같이 주입해야 합니다. 유스 케이스에 따라 참조 에셋을 참조하기 전에 먼저 주입해야 합니다.

Back to top