ARPG に含まれる属性およびエフェクト

ARPG で属性とエフェクトがどのように使用されるかを説明します。

Choose your operating system:

Windows

macOS

Linux

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

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

ダメージが適用される際、キャラクターは 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 ファイルを作成し、必要に応じてこれらをインポートするスクリプトをゲーム外で設定することもできます。

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

ARPG_AttributesAndEffects_02.png

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

Unreal Engine のドキュメントを改善するために協力をお願いします!どのような改善を望んでいるかご意見をお聞かせください。
調査に参加する
閉じる