동적 에셋 주입
개요
에셋 주입 애드온은 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
InjectAssetSystem
은 InjectAssetCommands
를 처리하고 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