ゲームプレイ アビリティ システムは ゲームプレイ エフェクト を使用して、ゲームプレイ アビリティによりターゲットになったアクタの属性を変更します。ゲームプレイ エフェクトは、アクタ属性に適用できる関数ライブラリによって構成されています。これらには即時エフェクト (ダメージの適用など)、または永続的なエフェクト (キャラクターに継続的なダメージを与える毒など) があります。
-
ゲームプレイ アビリティ エフェクトはバフとデバフに使用できます。
- ゲームの設計に応じて、キャラクターを強化または弱化することができます。
-
ゲームプレイ エフェクトはアセットであるため、ランタイム時に変更できません。
- ゲームプレイ エフェクトがランタイム時に作成された場合など、いくつかの例外はありますが、一度作成および構成されたデータは変更されません。
-
ゲームプレイ エフェクト スペック は、ゲームプレイ エフェクトのランタイム バージョンです。
- これらはゲームプレイ エフェクトに関連するインスタンス化されたデータ ラッパーです (ゲームプレイ エフェクトはアセットです)。ブループリント機能では、ゲームプレイ エフェクトではなくゲームプレイ エフェクト スペックが考慮され、それがアビリティ システム ブループリント ライブラリに反映されます。
-
ゲームプレイ エフェクト スペックは、アクタのアビリティ システム コンポーネントに追加されます。
- これは永続的なエフェクトに適用され、有効期限のあるライフタイムを設定することができます。その後、期限が来ると削除され、ターゲット アクタの ゲームプレイ属性 への変更が取り消されます。
ゲームプレイ エフェクトのライフタイム
ゲームプレイ エフェクトには Duration (期間) があり、Instant (即時)、Infinite (無限)、または Has Duration (期間あり) に設定することができます。期間が設定されているゲームプレイ エフェクトは、アクティブ ゲームプレイ エフェクト コンテナ に追加されます。アクティブ ゲームプレイ エフェクト コンテナはアビリティ システム コンポーネントの一部です。

-
即時のゲームプレイ エフェクトは、「Executed (実行済み)」と宣言され、アクティブ ゲームプレイ エフェクト コンテナに入ることはありません。
-
即時と期間ありの場合はどちらも「Applied (適用済み)」とされます。たとえば、メソッド
CanApplyGameplayEffect
では即時のものか期間があるかを考慮しません。 -
周期的なエフェクトは周期ごとに実行されるため、「Added (追加済み)」と「Executed」の両方になります。
1 つの例外として、クライアント上でのゲームプレイ エフェクトの予測があります (サーバーより先にある場合)。その場合、システムではその期間のエフェクトを予測し、サーバーの確認を待機します。
次の表では、調整可能なゲームプレイ エフェクトのプロパティについて説明します。
プロパティ | 説明 |
---|---|
Duration | ゲームプレイ エフェクトは即時適用 (攻撃されたらすぐにヘルスが減るなど)、限定された期間の適用 (数秒持続する動作スピードのブーストなど)、無期限の適用 (マジック ポイントを時間経過とともに自動的に再生成するキャラクターなど) が可能です。また、即時ではない期間のエフェクトをさまざまなインターバルで適用することも可能です。これらのインターバルにより、ゲームプレイを考慮したエフェクトの効果および音声や視覚効果のタイミングが変更される場合があります。 |
Component | ゲームプレイ エフェクト コンポーネントにより、ゲームプレイ エフェクトの動作が定義されます。利用可能なコンポーネントの完全なリストは、[#ゲームプレイエフェクトコンポーネント] を参照してください。 |
Modifier | Modifier は、ゲームプレイ エフェクトと属性がどのようにインタラクションするかを決定します。これには鎧のレートの属性を基本値の 5 パーセント増加させるような属性同士の数学的インタラクションや、エフェクトを実行するゲームプレイ タグ要求が含まれます。 |
Execution | Execution では、UGameplayEffectExecutionCalculation を使用してゲームプレイ エフェクト実行時のカスタムの動作を定義します。とりわけ Modifier では適切に処理されないような複雑な方程式を定義する際に有用です。 |
Gameplay Cue | Gameplay Cue はゲームプレイ アビリティ システムで制御可能なパーティクルやサウンドなどの装飾的なエフェクトをネットワーク的に効率よくマネージする方法です。ゲームプレイ アビリティとゲームプレイ エフェクトは、ゲームプレイ キューをトリガーできます。 Gameplay Cue はネイティブ コードやブループリント コードでオーバーライド可能な、次の 4 つの関数を介して動作します。
すべての Gameplay Cue は、「 |
Stacking | Stacking は、すでにバフやデバフ (またはゲームプレイ エフェクト) を保持しているターゲットにさらに適用する場合のポリシーを示します。また、新しいゲームプレイ エフェクトを元々のゲームプレイ エフェクト (オーバフローしてはじめて継続ダメージを与えるポイズンがもたらされる上昇するポイズン メーターなど) ですでに完全に飽和しているターゲットに適用するオーバフローの処理についても指定します。 システムでは、次のような幅広いスタッキングの動作をサポートしています。
|
ゲームプレイ エフェクト コンポーネント
ゲームプレイ エフェクトには、ゲームプレイ エフェクトの動作を決定する ゲームプレイ エフェクト コンポーネント (GEComponents) が含まれています。ゲームプレイ エフェクトでは、次のことを実行できます。
-
ゲームプレイ エフェクトが適用されるアクタの [Gameplay Tag](https://docs.unrealengine.com/5.2/ja/using-gameplay-tags-in-unreal-engine/) を変更するか、条件に応じて他のアクティブなゲームプレイ エフェクトを削除します。
-
ゲームプレイ エフェクトのユーザビリティを拡張できる独自のゲーム固有のゲームプレイ エフェクト コンポーネントを作成することができます。すべての必要な機能に大規模な API を提供する代わりに、ゲームプレイ エフェクト コンポーネントの実装者はゲームプレイ エフェクト フローを注意深く確認し、必要な結果を実現するために必要なコールバックをすべて登録する必要があります。そのため、ゲームプレイ エフェクト コンポーネントの実装はネイティブ コードに限定されます。
-
GEComponent はデータのみのブループリント アセットであるゲームプレイ エフェクト内に存在します。したがってゲームプレイ エフェクトと同様に、すべての適用されるインスタンスに対して GEComponent は 1 つのみ存在します。

次の表に、利用可能なゲームプレイ エフェクト コンポーネントの完全なリストを示します。
ゲームプレイ エフェクト コンポーネント | 説明 |
---|---|
UChanceToApplyGameplayEffectComponent | ゲームプレイ エフェクトが適用される確率。 |
UBlockAbilityTagsGameplayEffectComponent | オーナーのゲームプレイ エフェクトのターゲット アクタに対するゲームプレイ タグに基づいて、ゲームプレイ アビリティのアクティベーションのブロックを処理します。 |
UAssetTagsGameplayEffectComponent | ゲームプレイ エフェクト アセットが所有するタグ。これらはアクタに転送「されません」。 |
UAdditionalEffectsGameplayEffectComponent | 特定の条件下で (または条件なしに) アクティベートを試みる追加のゲームプレイ エフェクトを追加します。 |
UTargetTagsGameplayEffectComponent | ゲームプレイ エフェクトのターゲット (「オーナー」と言う場合もあります) にタグを付与します。 |
UTargetTagRequirementsGameplayEffectComponent | この GE を適用したり、実行を継続したりする必要がある場合にターゲット (ゲームプレイ エフェクトのオーナー) に必要なタグ要件を指定します。 |
URemoveOtherGameplayEffectComponent | 特定の条件に基づいて、他のゲームプレイ エフェクトを削除します。 |
UCustomCanApplyGameplayEffectComponent | CustomApplicationRequirement 関数の構成を処理して、この GameplayEffect を適用する必要があるかどうかを確認します。 |
UImmunityGameplayEffectComponent | 耐性によって他の GameplayEffectSpec の適用をブロックします。 |
ゲームプレイ属性
ゲームプレイ属性 には、次のような単精度浮動小数点値で記述可能なアクタの現在の状態の数値測定があります。
-
ヘルス ポイント
-
体力
-
移動速度
-
魔法への耐性
その他にもあります。属性は属性セット内の FGameplayAttribute 型の UProperties として宣言されます。このどちらにも属性が含まれ、それらを変更しようとする試みが管理されます。
属性と属性セットはネイティブ コードで作成する必要があります。ブループリントで作成することはできません。
属性セットを作成する
次の手順を実行して、属性セットを作成します。
-
UAttributeSet からクラスを継承し、UPROPERTY がタグ付けされているゲームプレイ属性データ メンバーを追加します。たとえば、「ヘルス」属性のみを持つ属性セットは次のようになります。
-
属性セットを作成したら、アビリティ システム コンポーネントに登録する必要があります。属性セットをアビリティ システム コンポーネントが所有するアクタのサブオブジェクトとして追加するか、アビリティ システム コンポーネントの GetOrCreateAttributeSubobject 関数に渡すことができます。
エフェクトと属性のインタラクションをプログラミングする
ゲームプレイ エフェクトが属性を変更しようとするときに、属性が応答する方法を属性セットがオーバーライドして処理できる関数がいくつかあります。例として、サンプル USimpleAttributeSet の「ヘルス」属性は浮動小数点値を保持し、その値はゲームプレイ アビリティ システムによってアクセスまたは変更が可能です。現在、ヘルス値がゼロになると実際には何も起こらず、ゼロ以下になるのを防ぐこともありません。
「ヘルス」属性を期待どおりに動作させるために、属性への変更の試みを処理するいくつかの仮想関数をオーバーライドして、属性セット自体にステップインさせることが可能です。
属性セットにより一般的に次の関数をオーバーライドします。
関数名 | 目的 |
---|---|
PreAttributeChange / PreAttributeBaseChange | これらの関数は、属性を変更する直前に呼び出されます。これらは「ヘルスは 0 と MaxHealth の間でなければならない」などの属性値についてのルールを強制することが目的で、属性を変更するゲーム内の反応をトリガーしないようにします。 |
PreGameplayEffectExecute | この関数は、属性値を変更する直前に計画された変更を拒否したり変更したりすることができます。 |
PostGameplayEffectExecute | 属性値を変更した直後に、その変化に反応可能な関数です。これには属性の最終値をクランプしたり、たとえば「ヘルス」属性がゼロになったら死亡するように、新しい値に対するゲーム内の反応をトリガーしたりします。 |