Blueless
概述
這個範例附有完整的源程式碼,並且展示了如何使用Quantum建立一個快速且充滿動感的線上2D平台射擊遊戲。
免責聲明:範例遊戲由BitCake Studio針對Photon引擎來開發。
下載
版本 | 發布日期 | 下載 | ||
---|---|---|---|---|
2.1.7 | 2023年6月15日 | Quantum Blueless 2.1.7 組建 251 |
在您開始之前
為了以線上多人玩家模式來運行範例,首先在Photon引擎儀表板中建立一個Quantum應用程式帳號,然後貼上它到PhotonServerSettings
資產中的AppId
欄位。
然後在場景選單中載入Menu
場景並且按下Play
。
技術資訊
- Unity:2020.3.20f1.
- 平台:PC (Windows / Mac)、WebGL及行動裝置(Android)
聚焦點
技術
- 角色控制器3D附有自訂轉向執行方式。
- 基於差量移動的射線投射拋射物。
- 由資料驅動的多型。
- 重新生成的點附有實體原型。
- 針對非活躍中玩家的中斷連線系統。
遊戲遊玩
- 快節奏、2D平台射擊遊戲。
- 雙重跳躍。
- 區域傷害。
- 榴彈。
- 武器裝填時間。
- 使用武器庫存更換武器。
控制
使用A
S
以移動,Space
以跳躍,Q
E
以更換武器,F
以使用榴彈,Left Mouse Button
以射擊,並且使用滑鼠游標以瞄準。
有用的模式
基於差量移動的射線投射拋射物
這是一個好的方法,以防止快速的子彈穿過牆壁。一個基於方向及速度的射線用於預測子彈的下一個移動,並且在可能的情況下偵測出一個命中。
C#
Physics2D.HitCollection hits = frame.Physics2D.LinecastAll(bulletTransform->Position, futurePosition);
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;
}
}
中斷連線系統
使用確定性輸入旗標,我們可以檢查玩家是否出席。所以,一陣子沒有出席的玩家的實體將從模擬中被移除。
C#
public override void Update(Frame frame)
{
frame.Global->DisconnectTime += frame.DeltaTime;
var robotsFilter = frame.Filter<PlayerID, Status>();
while (robotsFilter.NextUnsafe(out var robot, out var playerID, out var robotStatus))
{
DeterministicInputFlags flags = frame.GetPlayerInputFlags(playerID->PlayerRef);
if ((flags & DeterministicInputFlags.PlayerNotPresent) == DeterministicInputFlags.PlayerNotPresent)
{
robotStatus->DisconnectedTicks++;
}
else
{
robotStatus->DisconnectedTicks = 0;
}
if (robotStatus->DisconnectedTicks >= 15)
{
frame.Destroy(robot);
}
}
}
Back to top