This document is about: QUANTUM 3
SWITCH TO

Motor Dome

Level 4

概述

Quantum Motor Dome 範例演示了一種方法,即如何為最多6名玩家組建一款免費的類似Snake的體育遊戲,該遊戲具有不干預的主機端或加入大廳、使用自訂組建的FSM系統的自動遊戲狀態進展、廣譜命中檢測和玩家自訂等功能。

在您開始之前

Photon儀表板創建Quantum應用程式帳號並將其貼上到Unity專案中Assets/Resources下的PhotonServerSettings資產中的AppId中。
從場景下拉清單中選擇StartScene,然後按遊玩按鈕。

下載

版本 發布日期 下載

亮點

技術

  • 用於碰撞處理的廣譜查詢
  • 遊戲狀態的自訂狀態機
  • 使用MapDataBakerCallback自訂嵌入地圖資料
  • 玩家暱稱和玩家角色自訂

遊戲遊玩

核心遊戲功能包括:

  • 完整的遊戲迴圈,包括賽前大廳和賽後畫面。
  • 生成保護
  • 隨機生成的拾取物
  • 遊戲活動的新聞推送

專案

輸入

該專案使用傳統的Unity輸入系統。
(遊戲手把輸入表列為Xbox按鈕)

本機輸入:

  • P鍵打開暫停選單

Quantum輸入:

  • 使用AD鍵/左右箭頭/左拇指操縱杆X軸進行轉向
  • 使用W鍵/向上箭頭/A按鈕/RB加速
  • 使用S鍵/向下箭頭/B按鈕/LB剎車

進入遊戲

對戰配對:
要進行線上比賽,請選擇Matchmaking,然後選擇Start Queue。此時,對戰配對器接管,Quantum階段開始。在短暫的等待期後,LoadSyncSystem將進入介紹序列,之後遊戲將開始。遊戲狀態是完全自主的,不依賴於玩家的輸入來進行。

練習模式:
要進行單人比賽,請選擇練習。遊戲場景中的QuantumRunnerLocalDebug負責啟動Quantum階段。LoadSyncSystem將繞過介紹階段。

對戰配對器

對戰配對器類別從QuantumCallbacks衍生,並實作了IConnectionCallbacksIMatchmakingCallbacksIInRoomCallbacksIOnEventCallback,負責連接到遊戲並委派各種回調的流程。主要入口點是靜態的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的廣譜査詢。拾取物使用PhysicsCollider3DOnTriggerEnter3D進行碰撞檢測。

廣譜:
ShipCollisionInjectionSystem.cs - 對於每艘船,都會為船跡的每個分段新增一個線投射査詢。
ShipCollisionRetrievalSystem.cs - 評估船與航跡之間的碰撞,並區分與自身航跡末端碰撞的船以進行評分。

拾取物:
PickupSystem.cs - 與拾取物的碰撞依賴於具有附有回調標誌OnDynamicTriggerEnterPhysicsCollider3D的船,以及勾選了IsTriggerPhysicsCollider3D的拾取物。這些是在實體原型上設置的,可以在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