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
遊戲遊玩:
PickupCollectedPlayerDiedPlayerLeadGainedPlayerReconnectedPlayerScoreChanged
其他:
PlayerLeftPlayerDataChangedShutdown
ShipView類別聽取的時間:
PlayerVulnerablePlayerDataChanged
碰撞
玩家之間的碰撞利用了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