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