ARPG に含まれるアトリビュートおよびエフェクト

ARPG でアトリビュートとエフェクトがどのように使用されるかを説明します。

Windows
MacOS
Linux

Action RPG (ARPG) でアビリティ システムを使用するための最初のステップとして、 GameplayAbilities プラグインを有効にして Attribute Set クラスを作成します。Attribute Sets は UAttributeSet の C++ サブクラスである必要があるため、アビリティは C++ ゲームでのみサポートされています。URPGAttributeSet では、 current/max health および manaattack および defense buffsmovement speed のアトリビュート、およびダメージ計算式で使用される temporary damage アトリビュートを定義します。これらのアトリビュートはそれぞれ FGameplayAttributeData 構造として定義されます。ここには、永続的な変更によってのみ変更される Base value と、一時的なバフ/デバフによって変更される Current value が保存されます。このクラスでは、これらのアトリビュートの変更と複製を処理するためのボイラープレート コードを追加するいくつかのマクロが使用されます。ARPG は比較的シンプルであるため AttributeSet を 1 つだけ使用しますが、その他の一部のゲームについては、プレイヤーと敵で共有される Core セットと、 Core から継承し、プレイヤーのみが使用する追加のアトリビュートを含む Player セットを使用することをお勧めします。

アトリビュートが変更される前には、 PreAttributeChange 関数によって現在の health/mana の最大値でのスケーリングが処理されます。アトリビュートが変更されると、 PostGameplayEffectExecute 関数によって、変更に関する他のオブジェクトのクランプと通知が処理されます。ARPG では、すべてのキャラクターは、ダメージを受けるなどの処理を行うブループリント イベントを提供する RPGCharacterBase クラスから継承します。RPGCharacterBase のコンストラクタは、ゲームプレイ エフェクトを機能させる URPGAbilitySystemComponent および URPGAttributeSet サブオブジェクトを作成します。ゲームによっては、この処理をゲーム特有の AbilitySystemComponent サブクラスまたはコントローラーで行ったほうがよい場合があります。また、アクタの最初のインタラクション時にオブジェクトのオーバーヘッドを避けるために、 AttributeSets または AbilitySystemComponents をスポーンすることもお勧めします。

ダメージが適用される際、キャラクターは Health > 0 の状態である必要があります。アトリビュートのデフォルト値を初期化する方法はいくつかありますが、ARPG では Stats GameplayEffect を使用してそれらを初期化します。Stats ゲームプレイ エフェクトは ARPGCharacterBase::AddStartupGameplayAbilities で適用されます。ここでは現在の CharacterLevel で、キャラクター ブループリントから PassiveGameplayEffects のリストを読み取り、それらを適用します。 CharacterLevel が変更された場合は、エフェクトが削除されて、新しいレベルで再び追加されます。下の図では、Unreal Engine 4 (UE4) Editor で、NPC に使用される GE_StatsBase ゲームプレイ エフェクトが表示されています。 

ARPG_AttributesAndEffects_01.png

Instant 持続時間は、これが正確に一度だけ永続的に適用されることを意味します。主要な各統計には、 CurveTable に基づいて値をオーバーライドする Attribute Modifier があります。StartingStats「 Abilities/DataTables 」 にある CSV からインポートされ、各統計の行と各レベルのカラムが含まれます。この場合、 DefaultMaxHealth 行が参照され、カラムは CharacterLevel となります。GE_PlayerStats エフェクトはこの汎用エフェクトから継承し、すべての行を PlayerMaxHealth にするなどの変更を行います。カーブ テーブルをこのように使用することで、手動で個別のエフェクトを変更する必要なしに、ゲーム全体のアトリビュートのバランスを一度に調整し直すことが容易になります。また、 Excel などの外部データ ソースから CSV または JSON ファイルを作成し、必要に応じてこれらをインポートするスクリプトをゲーム外で設定することもできます。

マナはシンプルな ModifiersAdd 操作で変更されますが、ダメージについては RPGDamageExecution クラスが使用されます。実行計算は、一連のキャプチャ宣言と実行関数の 2 つの要素で構成されます。情報はキャプチャ宣言マクロによって UE4 Editor に提供されるため、ゲームプレイ エフェクトはプロジェクト内で実行関数を使用できます。キャプチャされた各アトリビュートについては、現在アクティブな一時的なモディファイアのリストとそれらのゲームプレイ タグがキャプチャされます。URPGDamageExecution::Execute_Implementation 内では、エフェクト実行時に渡されたゲームプレイ タグと一致するモディファイアのみが適用されます。これらのモディファイアを組み合わせて DamageAttackPower および DefensePower の「計算」数値を得ると、 SourceDamage * AttackPower / DefensePower 式によってその値が「最終的な」ダメージとして算出されます。次に、この最終的なダメージが URPGAttributeSet::PostGameplayEffectExecute 内の Health モディファイアとなります。GE_DamageBase は次のようになります。

ARPG_AttributesAndEffects_02.png

発生済みのダメージは AttackDamageDefaultAttack 行で設定されますが、「 1.0 」のスケールを [Curve Table] 参照の左側に変更することで、攻撃ごとの乗数を適用することもできます。フィルタリングのために Source/Target タグでは Require/Ignore タグの設定を許可しており、この場合、 Status.DamageImmune タグを持つターゲットに対してダメージは適用されません。それぞれの個別の攻撃により GE_DamageBase がサブクラス化され、必要に応じてタグまたはモディファイアが変更されます。

Select Skin
Light
Dark

Welcome to the new Unreal Engine 4 Documentation site!

We're working on lots of new features including a feedback system so you can tell us how we are doing. It's not quite ready for use in the wild yet, so head over to the Documentation Feedback forum to tell us about this page or call out any issues you are encountering in the meantime.

We'll be sure to let you know when the new system is up and running.

Post Feedback