This document is about: QUANTUM 2
SWITCH TO

입력

턴 베이스 게임에서 대역 사용을 최적화하려면 Command를 사용하는 것이 좋습니다. Command는 요청이 있을 때만 전송되지만 일반 입력은 모든 틱에서 전송되므로, 전자는 후자보다 더 적은 대역폭을 사용합니다.

골프 템플릿은 PlayCommandSkipCommand의 두 가지 유형의 Command 입력을 구현합니다. 각각은 일반 구조체를 사용하여 게임별 명령 데이터를 전달하고 직렬화합니다. 주의:Command를 생성할 때 포함된 데이터의 직렬화를 수동으로 구현해야 합니다.

CommandSystem은 플레이어가 보낸 명령을 수신하고 검증합니다.

커맨드

PlayCommand

플레이어는 차례대로 PlayCommand를 보내 해당 차례 동안 내린 결정/동향에 대한 정보를 보낼 수 있습니다.

PlayCommandData는 공을 치는 방향과 힘을 잡는 데 사용되는 FPVector3FP를 각각 감싸고 있습니다.

C#

[Serializable]
public struct PlayCommandData
{
  // game-specific command data here
  public FP Force;
  public FPVector3 Direction;
}

public class PlayCommand : DeterministicCommand
{
  public PlayCommandData Data;

  public override void Serialize(BitStream stream)
  {
  // serialize command data here
  stream.Serialize(ref Data.Force);
  stream.Serialize(ref Data.Direction);
  }
}

SkipCommand

플레이어들은 SkipCommand를 보내 현재 순서를 건너뛸 수 있습니다.

C#

[Serializable]
public struct SkipCommandData
{
  // game-specific command data here
}

public class SkipCommand : DeterministicCommand
{
  public SkipCommandData Data;

  public override void Serialize(BitStream stream)
  {
    // serialize command data here
  }
}    

유니티 측 헬퍼

유니티 쪽에는 입력의 캐싱과 전송을 돕는 몇 가지 스크립트가 있습니다.

CommandDispatcher

CommandDispatcher는 모든 로컬 플레이어의 PlayCommandSkipCommand 를 로컬 플레이어로 보낼 때 사용합니다.

StrikeInput

StrikeInputInputPoller가 등록하고 폴링 할 수 있도록 액티브 플레이어가 조준한 입력을 전달합니다.

StrikeInput 스크립트는 InputManager가 보낸 활성 로컬 플레이어의 입력 이벤트를 리슨 합니다. 마우스 끌기를 사용하여 조준 방향을 업데이트합니다. 또 다른 책임은 포스바 표시 위치를 지속적으로 업데이트하는 것입니다.

플레이어가 조준을 하고 마우스 버튼을 놓으면 현재 조준 방향과 포스바 표시 위치가 표시된 PlayCommand이 전송됩니다.

  • AimSensitivity: 마우스를 드래그하고 촬영 방향을 변경할 때 사용되는 축척 비율입니다.
  • ReverseControls: 촬영 방향에 적용하기 전에 입력 드래그 값이 반전됩니다.
  • ClampDirection: 조준 방향각은 GameConfig 에셋에 정의된 최소-최대 타격각 값에 따라 클램프 됩니다. 이러한 값은 시뮬레이션을 통해 이중 확인됩니다. 또한 시각화/UI 목적으로만 사용할 수 있지만 최대 스트라이크 오프닝 값을 클램프 합니다.
  • MaxStrikeOpeningAngle: 카메라 방향과 상대적인 최대 오프닝 각도입니다.

InputManager

클라이언트 시스템에는 로컬 플레이어가 여러 개 있을 수 있습니다. InputManager는 현재 전송/폴링/읽고 있는 로컬 플레이어 입력을 관리합니다.

마우스 버튼 이벤트와 같은 입력 이벤트를 처리하기 위해 다양한 정적 이벤트를 구현합니다. 다른 스크립트는 이러한 종류의 입력/이벤트를 수신하고 싶은 경우 InputManager에 등록합니다.

InputPoller

Quantum 시뮬레이션은 지정된 속도로 유니티의 입력을 폴링 합니다. 이는 Deterministic Config에 정의되어 있습니다. 입력 폴러는 가장 최근에 등록된 입력을 시뮬레이션에서 폴링 할 수 있도록 로컬 플레이어들에게 읽어주는 역할을 합니다.

입력 데이터는 등록된 순간부터 같은 플레이어의 다른 입력에 의해 덮어쓰여지거나 플레이어의 순서가 끝날 때까지 저장됩니다. 후자의 경우 등록된 입력이 기본값으로 재설정됩니다. 이 설정을 사용하면 원격 플레이어가 조준할 때 시뮬레이션에서 조준 데이터를 폴링하고 로컬 플레이어가 조준할 때 InputPoller에 등록된 입력에서 조준 데이터를 폴링 할 수 있으므로 시각적 반응이 더 선명해집니다.

에이밍 UI 디스플레이

AimingDisplay는 플레이어가 조준할 때 방향 화살표, 포스 바 등의 시각적 기능을 업데이트하는 역할을 합니다.

에이밍 플레이어가 로컬인 경우, AimingDisplayInputPoller에서 특정 플레이어에 대해 등록된 입력을 폴링 합니다. 또는 플레이어가 원격인 경우 스크립트가 시뮬레이션에서 가장 최근의 해당 입력을 폴링 합니다.

golf header
Back to top