This document is about: QUANTUM 2
SWITCH TO

Input

為了在回合制遊戲中最佳化頻寬使用,建議使用Command。只在請求時發送一個Command,而在每個刷新發送常規輸入;因此前者比後者使用的頻寬更少。

Quantum高爾夫範例執行兩種類型的Command輸入,PlayCommandSkipCommand。各個輸入使用泛型架構以攜帶特定遊戲的命令資料,並且序列化它。注意事項: 當建立一個新的Command時,需要手動執行它含有的資料的序列化。

CommandSystem接收及驗證玩家發送的命令。

命令

遊玩命令

玩家可以在他們的回合發送一個PlayCommand,以發送在該回合期間採用的決策/移動的資訊。

PlayCommandData包裝一個FPVector3及一個FP,其各自用於保持球打擊方向及力量。

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

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
  }
}

Unity側協助工具

在Unity側有一些指令碼可以協助快取及發送輸入。

命令發送器

CommandDispatcher用於發送所有本機玩家的PlayCommandSkipCommand本機玩家。

打擊輸入

StrikeInput轉傳活躍中玩家的瞄準輸入,由InputPoller來註冊及輪詢。

StrikeInput指令碼接聽由InputManager發送的活躍中本機玩家的輸入事件。使用滑鼠拖曳以更新瞄準方向。它的另一個責任是持續地更新力量條標記位置。

當玩家正在瞄準並且放開滑鼠按鈕時,發送一個PlayCommand,其附有目前瞄準方向及力量條標記位置。

  • AimSensitivity:拖動滑鼠並更改拍攝方向時使用的比例因數。
  • ReverseControls:輸入拖動值在應用於拍攝方向之前會被反轉。
  • ClampDirection:瞄準方向角度根據GameConfig資產中定義的最小——最大打擊角度值來進行夾緊。這些值由模擬來雙重檢查。它也夾緊最大打擊開放值,而這純粹只是針對視覺效果/UI的目的來進行。
  • MaxStrikeOpeningAngle:當玩家開始瞄準時,相對於相機的面對方向的最大開放角度。

輸入管理器

它執行各種靜態靜態事件以處理輸入事件,比如滑鼠按鈕事件。其他指令碼如果有興趣接收此類輸入/事件,則會向InputManager註冊。

輸入輪詢器

Quantum模擬在一個給定的速率下從Unity輪詢輸入——這在Deterministic Config中定義。針對本機玩家,InputPoller負責讀取最近的已註冊輸入,這樣模擬可以輪詢它。

輸入資料從註冊時被儲存,直到被同一名玩家的另一個輸入所覆寫,或直到玩家的回合結束。在後者的情形,已註冊輸入被重新設定為其預設值。這個設定允許在遠端玩家瞄準時從模擬來輪詢瞄準資料,也允許在本機玩家瞄準時從InputPoller中的已註冊輸入來輪詢瞄準資料;這帶來一個更清晰的視覺效果回應。

瞄準UI顯示

AimingDisplay負責在玩家瞄準時更新視覺效果功能,比如方向箭頭與力量條。

當本機玩家在瞄準時,AimingDisplayInputPoller針對該特定玩家來輪詢已註冊輸入;或者,如果是遠端玩家,則指令碼輪詢來自模擬的最新的相對應輸入。

golf header
Back to top