Motor Dome
概述
Quantum Motor Dome 範例演示了一種方法,即如何為最多6名玩家組建一款免費的類似Snake的體育遊戲,該遊戲具有不干預的主機端或加入大廳、使用自訂組建的FSM系統的自動遊戲狀態進展、廣譜命中檢測和玩家自訂等功能。
在您開始之前
從Photon儀表板創建Quantum應用程式帳號並將其貼上到Unity專案中Assets/Resources
下的PhotonServerSettings
資產中的AppId
中。
從場景下拉清單中選擇StartScene
,然後按遊玩按鈕。
下載
版本 | 發布日期 | 下載 | |
---|---|---|---|
亮點
技術
- 用於碰撞處理的廣譜查詢
- 遊戲狀態的自訂狀態機
- 使用
MapDataBakerCallback
自訂嵌入地圖資料 - 玩家暱稱和玩家角色自訂
遊戲遊玩
核心遊戲功能包括:
- 完整的遊戲迴圈,包括賽前大廳和賽後畫面。
- 生成保護
- 隨機生成的拾取物
- 遊戲活動的新聞推送
專案
輸入
該專案使用傳統的Unity輸入系統。
(遊戲手把輸入表列為Xbox按鈕)
本機輸入:
P
鍵打開暫停選單
Quantum輸入:
- 使用
A
和D
鍵/左右箭頭/左拇指操縱杆X軸進行轉向 - 使用
W
鍵/向上箭頭/A按鈕/RB加速 - 使用
S
鍵/向下箭頭/B按鈕/LB剎車
進入遊戲
對戰配對:
要進行線上比賽,請選擇Matchmaking
,然後選擇Start Queue
。此時,對戰配對器接管,Quantum階段開始。在短暫的等待期後,LoadSyncSystem
將進入介紹序列,之後遊戲將開始。遊戲狀態是完全自主的,不依賴於玩家的輸入來進行。
練習模式:
要進行單人比賽,請選擇練習。遊戲場景中的QuantumRunnerLocalDebug
負責啟動Quantum階段。LoadSyncSystem
將繞過介紹階段。
對戰配對器
對戰配對器類別從QuantumCallbacks
衍生,並實作了IConnectionCallbacks
、IMatchmakingCallbacks
、IInRoomCallbacks
、IOnEventCallback
,負責連接到遊戲並委派各種回調的流程。主要入口點是靜態的Connect
方法,當連接狀態更新時,該方法會向調用者發出訊號。
遊戲狀態
遊戲狀態系統啟用和禁用實作任何遊戲狀態介面的系統。系統可以實作一個或多個介面,並且將在任何相應的遊戲狀態下啟用。不實作遊戲狀態介面的系統不受遊戲狀態系統的影響。
當遊戲狀態發生變化時,會發送一個GameStateChanged
事件,其中包含舊遊戲狀態和新遊戲狀態。
該系統設計為可重用,可以輕鬆更改或新增狀態。
與遊戲狀態系統相關的檔案有:
pre
quantum.code
└ Game
├ Game State
│ ├ gameState.qtn
│ └ IGameStates.cs
└ Systems
└ GameStateSystem.cs
事件
EventSubscriptions
類別聽取大多數事件。所有「玩家」事件都委託給InterfaceManager
進行處理。
狀態系統:
GameStateChanged
遊戲遊玩:
PickupCollected
PlayerDied
PlayerLeadGained
PlayerReconnected
PlayerScoreChanged
其他:
PlayerLeft
PlayerDataChanged
Shutdown
ShipView
類別聽取的時間:
PlayerVulnerable
PlayerDataChanged
碰撞
玩家之間的碰撞利用了Quantum的廣譜査詢。拾取物使用PhysicsCollider3D
和OnTriggerEnter3D
進行碰撞檢測。
廣譜:
ShipCollisionInjectionSystem.cs
- 對於每艘船,都會為船跡的每個分段新增一個線投射査詢。
ShipCollisionRetrievalSystem.cs
- 評估船與航跡之間的碰撞,並區分與自身航跡末端碰撞的船以進行評分。
拾取物:
PickupSystem.cs
- 與拾取物的碰撞依賴於具有附有回調標誌OnDynamicTriggerEnter
的PhysicsCollider3D
的船,以及勾選了IsTrigger
的PhysicsCollider3D
的拾取物。這些是在實體原型上設置的,可以在Unity專案的Assets/Resources/DB/Quantum Prefabs
中找到。
自訂嵌入地圖資料
此範例利用MapData
資產的UserAsset
欄位將其他資訊與地圖相關聯。
參見地圖嵌入瞭解更多資訊。
Quantum:
MapMeta.cs
- 存儲生成點的位置以及遊戲空間的大小和原點。
Unity:
MapDataMeta.cs
- 一種MonoBehaviour,它保存了要嵌入到MapMeta
資產的資訊。CustomMapBaker.cs
- 從MapDataBakerCallback
衍生,以便將視圖側地圖資料嵌入到Quantum側的MapMeta
資產中。
自訂
Unity:
LocalData.cs
- 在將自訂資料發送到Quantum之前保存該資料。
Quantum:
RuntimePlayer.User.cs
- 序列化玩家的暱稱、船原型和選定的顏色。然後,視圖可以透過幀的GetPlayerData
方法擷取RuntimePlayer
來存取這些內容。
下方的程式碼片段顯示了如何序列化ColorRGBA
。請注意,沒有使用alpha,因此不需要序列化。每種顏色只使用3個位元。
C#
partial void SerializeUserData(BitStream stream)
{
/* ... */
stream.Serialize(ref primaryColor.R);
stream.Serialize(ref primaryColor.G);
stream.Serialize(ref primaryColor.B);
/* ... */
}
第三方資產
範例遊戲由Nthusia Studio為Photon Engine開發。
Back to top