This document is about: QUANTUM 2
SWITCH TO

Battle Royale TopDown

Level
INTERMEDIATE
Quantum Battle Royale TopDown サンプルは現在、アクティブな Photon Gaming Circle に参加しているユーザー、または Photon Industries Circle のサブスクリプションを持つユーザーのみが利用できます。

Gaming Circle メンバーシップは、マルチプレイヤー ゲームを記録的な速さで作成して起動するために必要なすべてのサンプル、SDK、サポートを提供します。 Gaming以外の場合は、Industries Circle が完全なスイートと専用ライセンス オプションを提供します。

概要

このサンプルは完全なソースコード付きで提供され、Quantumを使用して32人用のトップダウンバトルロイヤルゲームを作成する方法を示しています。

デスゾーンの挙動やインベントリなど、バトルロイヤルゲームの基本的な機能を紹介しています。

ダウンロード

バージョン リリース日 ダウンロード
2.1.7 2023年6月22日 Quantum Battle Royale TopDown 2.1.7 Build 260

技術情報

  • Unity: 2020.3.37f1;
  • プラットフォーム: PC (Windows / Mac), and Mobile (Android);

ハイライト

技術

  • トップダウンのキャラクターコントローラー。
  • デルタムーブメントに基づくレイキャスト投射。
  • Entity PrototypesによるRespown Point。

ゲームプレイ

  • グラネードランチャー。
  • 2.5次元物理用のカスタム重力。
  • アニメーションカーブ加速のロケットランチャー。
  • 投下武器システム。
  • バトルロイヤルデスゾーン。
  • プレイヤーの戦闘メッセージ。
  • セーフゾーンの方向のためのUI表示。
  • ヒールパワーアップ;
  • モバイル対応のUIコントロール。

コントロール

移動には W A SD を、武器の変更には Q, E または マウススクロール を使います。アイテムの近くに数秒間立つとアイテムを回収できます。

グレネードランチャー

発射されると、ランチャーは手榴弾をインスタンス化します。この手榴弾は弾む物理オブジェクトとして動作し、一定の低さの障害物を乗り越えることができます。2D物理ベースのゲームでこの挙動を実現するために、2.5D Transformと組み合わせてカスタム重力がエミュレートされました。

C#

public override void Update(Frame f, ref Filter filter)
    {
      EntityRef entity = filter.Entity;
      CustomGravity* customGravity = filter.customGravity;
      Transform2DVertical* transformVertical = filter.TransformVertical;
      PhysicsCollider2D* collider = filter.Collider;

      if (customGravity->VerticalSpeed <= 0)
      {
        var distance = transformVertical->Height + FPMath.Abs(customGravity->VerticalSpeed * f.DeltaTime);
        if (transformVertical->Position <= distance - (collider->Shape.Circle.Radius))
        {
          if (customGravity->VerticalSpeed > _bounceThreshold)
          {
            transformVertical->Position = _groundHeight;
            customGravity->Grounded = true;
          }
          else
          {
            customGravity->VerticalSpeed = -customGravity->VerticalSpeed / (1 + _restitution);
          }
        }
        else
        {
          customGravity->Grounded = false;
        }
      }
      else
      {
        customGravity->Grounded = false;
      }
      if (customGravity->Grounded == false)
      {
        transformVertical->Position += (customGravity->VerticalSpeed) * f.DeltaTime;
        customGravity->VerticalSpeed += _gravityForce * f.DeltaTime;
      }
    }

デスゾーン

デスゾーンはバトルロワイヤルゲームの危険地帯のように機能し、2つの状態があります:Waiting(待機) - サイズの変化はないが、安全地帯の外にいるプレイヤーはダメージを受ける。Zone Shrinking(ゾーン縮小) - 安全地帯は、あらかじめ決められた目標サイズとランダムに割り当てられた位置に達するまで、徐々に小さくなる。

C#

DeathZoneConfig config = frame.FindAsset<DeathZoneConfig>(Config.Id);
      FP elapsed = config.Timers[Iteration] - ChangeStateDelay;
      FP t = FPMath.Clamp01(elapsed / config.Timers[Iteration]);

      CurrentRadius = FPMath.Lerp(config.Radius[Iteration], TargetRadius, t);
      CurrentCenter = FPVector2.Lerp(InitialIterationCenter, TargetCenter, t);

サードパーティーアセット

Projectiles Sampleには、それぞれの作成者の好意により提供されたいくつかのアセットが含まれています。完全なパッケージはそれぞれのサイトで入手できます:

重要: 商用プロジェクトで使用するには、それぞれのクリエイターからライセンスを購入する必要があります。

Back to top