ゲーム アビリティ システム は、 RPG や MOBA タイトルで使用される能力やアトリビュートのタイプを構築するための柔軟性の高いフレームワークです。ゲーム内で使用するアクションやパッシブ アビリティ、これらのアクションの結果としてさまざまなアトリビュートを作成または消耗させるステータス エフェクトを構築したり、これらのアクションの使用を制御するための「クールダウン」タイマーあるいはリソース コストの実装をしたり、各レベルでの能力とその効果のレベルを変更したり、パーティクルやサウンドエフェクトなどをアクティベートすることができます。ゲーム アビリティ システムは、近年の RPG や MOBA タイトルに組み込まれているジャンプのように単純なものから、お気に入りのキャラクターのアビリティと同じくらい複雑なゲーム アビリティの設計、実装および効率の良いネットワーク化を容易にします。
アビリティ、タスク、属性、エフェクト
Gameplay Abilities は UGameplayAbility
クラスの C++ またはブループリントの子です。Gameplay Abilities は、アビリティが実際に何をするのかを C++ コードまたはブループリント スクリプトで定義すると同時に、アビリティをどのように取り扱うか (ビヘイビアのレプリケーションまたはインスタンス化など) という部分も作成します。
ゲームプレイ アビリティ内のロジックは、アビリティを定義するロジックの最中において、一連の非同期のビルディング ブロック (アビリティ タスク として知られている) を呼び出します。これらのタスクは抽象 UAbilityTask
クラスから派生しています。アビリティ タスクは C ++で記述されており、作業が完了すると、いくつかのデリゲート (Cpp) または出力実行ピン (ブループリント) の 1 つを頻繁に呼び出します。たとえば、ターゲットを必要とするアビリティには、ターゲットを確認するための 1 つのデリゲートまたは出力ピンと、アビリティをキャンセルするための別のピンを持つ「照準」タスクがある場合があります。
ゲームプレイ アビリティだけでなく、ゲーム アビリティ システムも ゲームプレイ アトリビュート と ゲームプレイ エフェクト をサポートしています。ゲームプレイ アトリビュートは、ゲームまたはアクタに何らかの影響を与える FGameplayAttribute
構造体に格納された float
値です。通常はヘルス値、強さ、ジャンプの高さ、アタック速度などです。ゲームプレイ エフェクトでゲームプレイ アトリビュートを瞬時に、または経時的 (一般的に「バフ」「デバフ」として知られている) に変更できます。魔法をかけた時に魔法ポイントを差し引いたり、「Sprint (ダッシュ)」アビリティがオンの間は移動速度が加速したり、回復薬 1 錠が効いている間はヘルス値ポイントが徐々に回復するなどです。
ゲームプレイ アビリティ システムとインタラクションするアクタにはアビリティ システム コンポーネントが必要です。アビリティ システム コンポーネントは、アビリティを起動し、アトリビュートを格納し、エフェクトを更新し、アクタ間のインタラクションを処理します。ゲームプレイ アビリティ システムを構築し、アビリティ システム コンポーネントを含むアクタを作成したら、アビリティを作成し、それに対するアクタの反応を定義できます。
システムのセットアップ
ゲームプレイ アビリティ システムはプラグインなので、使用するには有効にする操作が必要です。次の手順でプラグインを有効にします。
- [Edit (編集)] -> [Plugins] ウィンドウで [Gameplay Ability System Plugin] を有効にします。
- このシステムを最大限に使用するために「GameplayAbilities」「 GameplayTags 」「 GameplayTasks 」を
PublicDependencyModuleNames
プロジェクトの「(プロジェクト名) .Build.cs 」ファイルに追加します。パブリック モジュールのリストを探すことで簡単に追加できます。
PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "HeadMountedDisplay" });
ゲームプレイ アビリティ システムを使うには、括弧の中のリストのどこかに 3 つのモジュール名を以下のように追加します。
PublicDependencyModuleNames.AddRange(new string[] { "GameplayAbilities", "GameplayTags", "GameplayTasks", "Core", "CoreUObject", "Engine", "InputCore", "HeadMountedDisplay" });
アビリティ システム コンポーネントはゲームのキャラクタがゲームプレイ アビリティ システムにアクセスする際のメイン インターフェイスになります。このコンポーネントは、ゲームプレイのアトリビュートを管理し、ゲームプレイ イベントを実行し、ゲームプレイ アビリティを格納するだけではなく、ゲームプレイ アビリティのアクティベーション、確定、および取り消しコマンドへのプレイヤーの入力を処理します。ゲームプレイ アビリティ システムとインタラクションするアクタにはアビリティ システム コンポーネントが必要です。