Architecture
玩家
主Player
指令碼處理基本功能,如移動和武器控制的輸入處理。它還決定了正確玩家視覺表示的可見性,在本機玩家的第一人稱視覺(僅手拿武器)和本機玩家看到的其他玩家的第三人稱視覺(全身角色)之間切換。第三人稱動畫也在此指令碼中進行控制。
玩家輸入由PlayerInput
類別處理,該類別累積來自裝置(鍵盤/滑鼠)的輸入。然後,透過標準Fusion OnInput
回調來消耗累積的輸入。
玩家運行狀況存儲在Health
指令碼中。在遊戲過程中,玩家在生成後會有一段短暫的永生期。如果玩家使用武器開火,永生將立即停止。
所有玩家都能聽到 Simple FPS 中的腳步聲,而本機玩家聽到自己的腳步聲稍微安靜一些。
SimpleKCC
(簡單運動學角色控制器)元件解決玩家的移動和碰撞問題。有關更多資訊,請參閱Simple KCC。
BodyHitbox
是標準Fusion Hitbox
元件的下層,用於為不同的身體部位執行具有不同傷害修改器的命中框。例如,頭部受到雙重傷害,而腿部受到減少的傷害。值得注意的是,為了簡單起見,玩家命中框的位置不受動畫的影響,它們以靜態姿勢設定,這代表了最常見的玩家姿勢——手持武器。
有關Fusion中動畫的更多資訊,請參閱Fusion操作手冊中的動畫頁面與動畫技術範例。請注意,這些範例是使用Fusion V1組建的。
武器
Weapons
指令碼處理遊戲中武器的一般功能,包含對所有玩家武器的參照,並允許進行射擊和重新裝彈等操作。所有武器都已經包含在玩家預製件的層次結構中,當遊戲中只有少數武器時,這是一種簡單的方法。
Simple FPS 範例包含命中掃描武器,該武器以指定的最大距離發射光線投射,允許立即進行命中評估。儘管拋射物不會隨著時間的推移而物理上傳播,但該範例採用了虛擬拋射物視覺效果(由ProjectileVisual
指令碼處理),產生了穿過有彈痕的快速黃色子彈的錯覺。該彈痕準確地表示光線投射的方向和終點。
對於每一次拋射物發射,一個小的資料結構ProjectileData
存儲在Weapon
指令碼內的陣列中。該陣列是聯網的,起到迴圈資料緩衝區的作用,這意味著當到達陣列的末端時,拋射物會從頭開始重新存儲。使用此陣列,可以向所有客戶端發射拋射物,確保高效的拋射物網路。
C#
private struct ProjectileData : INetworkStruct
{
public Vector3 HitPosition;
public Vector3 HitNormal;
public NetworkBool ShowHitEffect;
}
為了更深入地瞭解拋射物及其網路,可以在拋射物基礎與拋射物進階範例中找到全面的說明。請注意,這些範例是使用Fusion V1組建的。
拾取物
範例中有兩種類型的拾取物:武器拾取物和健康拾取物。當玩家走過這兩個拾取物時,都會自動收集它。HealthPickup
會立即對玩家進行指定數量的治療,恢復他們的健康。WeaponPickup
會授予玩家一件新武器,或者在玩家已經獲得特定武器的情況下重新裝填彈藥。
遊戲遊玩
Gameplay
指令碼是遊戲的中心指令碼,處理 Simple FPS 中遊戲體驗的各個方面。它負責玩家生成、計算玩家分數以及管理不同遊戲狀態之間的轉換。
Simple FPS 中的遊戲模式是一種經典的死亡競賽,玩家在其中進行戰鬥以消滅對方。被淘汰後,玩家在死亡後一定時間後重生。比賽在時間結束時結束,擊殺次數最多的玩家獲勝。
遊戲系統在幾個狀態下運行,包括Skirmish
、Running
和Finished
。在Skirmish
狀態下,單人玩家可以在沒有任何時間限制的情況下自由探索競技場。一旦第二名玩家連線到遊戲,遊戲將切換到Running
狀態,比賽計時器將啟動。最後,當比賽結束時達到Finished
狀態,並顯示結果。
連線的玩家由Gameplay
指令碼使用玩家資料字典(複製到所有玩家)進行管理。在這個字典中,每個玩家都與PlayerData
資料結構相關聯,該資料結構保存了關於玩家的重要資訊。PlayerData
包括玩家的暱稱、他們累積的擊殺人數以及他們的當前狀態(無論他們是否活著)等詳細資訊。
C#
public struct PlayerData : INetworkStruct
{
[Networked, Capacity(24)]
public string Nickname { get => default; set {} }
public PlayerRef PlayerRef;
public int Kills;
public int Deaths;
public int LastKillTick;
public int StatisticPosition;
public bool IsAlive;
public bool IsConnected;
}
PlayerData
資料結構允許在整個遊戲體驗中高效追蹤玩家及其統計資料。
UI
Simple FPS 中的使用者介面以直接的方式被處理,不依賴於任何特定的UI框架。負責UI管理的主要指令碼是GameUI
指令碼。它啟用了在遊戲過程中應該可見的適當的UI遊戲物件。此外,GameUI
指令碼維護對其他UI元素的參照,並在玩家生成時更新玩家UI。
除了一般的UI處理外,遊戲還發佈了遊戲公告,為玩家提供重要的反饋。這些公告,如「線索遺失」或「線索已拿取」,由負責遊戲資訊面板的UIGameplayInfo
指令碼管理。該指令碼根據玩家統計資料的變化啟用特定的公告遊戲物件,確保在適當的時間向玩家顯示相關消息。
Simple FPS 中的UI執行方式注重簡單性和功能性,確保玩家在不需要複雜UI框架的情況下接收必要的資訊。
Back to top