This document is about: QUANTUM 3
SWITCH TO

Further Steps

此示例Unity項目和原始程式碼可用於深入瞭解如何使用Quantum SDK構建 簡單的2D多人遊戲。此頁面將提供更多資源、連結和資訊,以幫助更好地理解架構的各個部分。

雖然這只是一個簡單的遊戲,但這個專案已經相當複雜了。要按照關於如何創建簡單核心遊戲迴圈的分步教程進行操作,Asteroids教學更適合。

關於什麼是Quantum SDK以及什麼是確定性/復原的介紹可以在Quantum概述中找到。

要瞭解SDK內容是如何構建的,請閱讀Quantum SDK和項目佈局

Quantum基礎

本節將快速介紹從哪裡開始探索Quantum遊戲的基本方面,特別是Platform Shooter 2D示例。

QuantumGameScene包含QuantumMapSceneColliders遊戲物件,它們後來代表了Quantum模擬的一部分。

例如,透過在地圖檢查器中按Bake,將靜態碰撞器內嵌成該場景的Quantum地圖。

當按下Play時,QuantumDebugRunner遊戲物件用於在當前場景中啟動Quantum模擬。它包含RuntimeConfig內容,地圖和其他重要的Quantum配置從這裡開始連結。

例如,SystemsConfig,它引用了PlatformShooter2DSystemsConfig資產。該檔案包括將要啟動的所有Quantum系統。

當透過遊戲選單場景載入場景時,調試運行器會自行禁用。

Assets/QuantumUser/Simulation資料夾的內容包括所有遊戲模擬源和QTN檔案(Quantum程式碼生成)。它使用Unity的asmref以最終新增到模擬dll中。

當遊戲在QuantumEntityViewUpdater遊戲物件下運行時,會生成Quantum實體視圖。例如,玩家角色實體(在UI中選擇後)。

要選擇的兩個實體原型是Character_Boy_VariantCharacter_Girl_Variant資產。

PlayerSystem類別控制如何在運行時根據使用ISignalOnPlayerAdded訊號加入的新玩家創建化身。

示例功能實現

本節將更詳細地解釋所選功能的實現。

新的二維運動學角色控制器

2D KCC是使用膠囊碰撞器的新實現,未來也將作為外掛程式提供,就像3D KCC外掛程式一樣。

它也不同於我們即將棄用的在機KCC

它的設計讓人很容易上手任何2D平台遊戲,也包含一套全面的生產級功能。它的預構建選項可以透過KCC2DConfig資產進行調整,以實現多種遊戲風格,而無需修改其程式碼。

這是一份現時所包含內容的非詳盡清單:

  • 可配置的膠囊形狀和LayerMask
  • 預求解器、後求解器碰撞和觸發器的回調
  • 自我調整多步CCD:全過程的次數是動態的,取決於速度和膠囊的半徑
  • 反覆運算穿透求解器,每次反覆運算都有動態窄相位檢查
  • 土狼時間、輸入緩衝區、雙跳、壁跳和破折號:所有參數均可切換和調整
  • 坡度、空氣控制、空氣阻力和向下重力倍增器(重量控制+按鈕控制的跳躍高度)
  • 有限狀態機(自由落體、地面、斜坡、牆壁、衝刺、跳躍、雙跳躍)
  • UI/視圖果汁的預構建事件(跳躍、著陸等)

基於差量運動的射線拋射物

在不使用CCD的情况下,對子彈使用增量光線投射是防止快速子彈穿過牆壁的好方法。檢查基於方向和速度的光線投射,以預測下一個子彈運動並檢測命中。

C#

Physics2D.HitCollection hits = frame.Physics2D.LinecastAll(bulletTransform->Position, futurePosition, -1, QueryOptions.HitAll | QueryOptions.ComputeDetailedInfo);
for (int i = 0; i < hits.Count; i++)
{
  var entity = hits[i].Entity;
  ...
  if (entity == EntityRef.None)
  {
    bulletTransform->Position = hits[i].Point;
    // Applies polymorphic behavior on the bullet action
    data.BulletAction(frame, bullet, EntityRef.None);
    return true;
  }
}

遊戲中角色選擇大廳

遊戲中的角色選擇是在遊戲前創建大廳場景的替代方案。在沒有權威服務器的情况下,使用Photon Realtime房間內容控制大廳的所有邊緣情况(併發團隊選擇、超時等)通常很難處理。

在模擬中運行角色或團隊選擇不易出錯且安全。例如,團隊分佈的最終決定權是基於確定性模擬的,不能被欺騙。

此示例允許模擬開始,同時將玩家新增到遊戲中延後到在UI中選擇角色之後。

CharacterSelectionUIController.cs處理UI,最後創建一個RuntimePlayer物件並請求新增玩家。使用AddPlayer webhook,可以透過自訂遊戲資料後端來輕鬆驗證RuntimePlayer配置。

C#

// Create player data with the selected character.
RuntimePlayer playerData = new RuntimePlayer();
playerData.PlayerAvatar = characterPrototype;

// Attempt to set the player's nickname from the menu.
var menu =
FindAnyObjectByType(typeof(Quantum.Menu.QuantumMenuUIController)) as Quantum.Menu.QuantumMenuUIController;
if (menu != null)
{
  playerData.PlayerNickname = menu.ConnectArgs.Username;
}

// Add the player to the game.
runner.Game.AddPlayer(playerData);

在伺服器確認新增玩家請求後,模擬中的PlayerSystem.cs指令碼會監聽ISignalOnPlayerAdded訊號以創建玩家化身。

C#

EntityRef character = frame.Create(prototypeAsset);
PlayerLink* playerLink = frame.Unsafe.GetPointer<PlayerLink>(character);
playerLink->PlayerRef = player;
RespawnHelper.RespawnRobot(frame, character);

定制QuantumMenu

遊戲示例使用Quantum原型選單定制和預製變體來創建Quantum示例選單的不同外觀,同時仍然相容SDK升級。

這樣的定制可以快速用於示例原型,並給出如何創建自己的線上選單的印象。

Back to top