This document is about: QUANTUM 3
SWITCH TO

Input & Connection Flags

簡介

DeterministicInputFlags被 Quantum 用於:

  • 檢測玩家是否 在線,即是否已連接到模擬;
  • 決定如何為特定玩家 預測 下一幀的輸入;
  • 了解已驗證幀上的輸入是由客戶端提供的,還是被服務器 替換 的。

可以通過實現PlayerConnectedSystem來自動化這些檢查,更多信息請參考玩家頁面上的相關條目

類型

C#

public enum DeterministicInputFlags : byte {
  Repeatable = 1 << 0,
  PlayerNotPresent = 1 << 1,
  ReplacedByServer = 1 << 2,
  Command = 1 << 3
}
  • PlayerNotPresent = 表示該玩家索引沒有客戶端連接。
  • ReplacedByServer = 表示該玩家索引由客戶端控制,但客戶端未及時發送輸入,導致服務器重複或替換 / 清零輸入。
  • Repeatable = 告訴服務器和其他客戶端將此輸入數據複製到下一幀(在服務器因超時替換輸入時,以及在其他客戶端的本地預測算法中)。開發者可以在 Unity 中注入玩家輸入時設置此標誌,它應該用於類似直接控制的輸入(如移動);不適用於命令類輸入(例如購買物品)。

實現示例

重要: DeterministicInputFlags僅在 已驗證 的幀上可信。

下面的代碼片段摘自 SDK 中提供的PlayerConnectedSystem

C#

public unsafe class PlayerConnectedSystem : SystemMainThread {
    public override void Update(Frame frame) {
      // only trustable in Verified frames
      if (frame.IsVerified == false) {
        return;
      }

      for (int p = 0; p < f.PlayerCount; p++) {
        var isPlayerConnected = (frame.GetPlayerInputFlags(p) & Photon.Deterministic.DeterministicInputFlags.PlayerNotPresent) == 0;
        // extra logic based on the player connectivity state
      }
    }
  }
}
Back to top