ue-gameplay-abilities について
UE 5.8 の Gameplay Ability System を使う開発者向けスキルです。アビリティ、エフェクト、属性、タスク、タグ、レプリケーション、Gameplay Cue と初期化方法を解説します。
主な機能
- 01Ability System Component の設定
- 02アビリティの起動とポリシー
- 03アビリティタスクとイベント待機
- 04Gameplay Effect と属性
- 05タグ、レプリケーション、Cue
活用シーン
- 01コストやクールダウン付き能力の実装
- 02アニメーションや Gameplay イベントの待機
- 03ダメージや時間制限付きバフの適用
- 04ASC の所有権とレプリケーション設定
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ quodsoler/ unreal-engine-skills --skill ue-gameplay-abilitiesインストール後、Claude Code で/ue-gameplay-abilitiesを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/ability-task-reference.mdgameplay-effect-reference.mdgas-setup-patterns.md詳細
UE Gameplay Ability System
対象エンジン:UE 5.8。以下の API は 5.8 のヘッダーに照らして検証済みです。古い形式は「非推奨 — 使用しないでください」に記載されています。
GAS は GameplayAbilities プラグイン(Engine/Plugins/Runtime/GameplayAbilities)として提供されており、Experimental ではなく、本番環境で使用できます。.uproject で有効にし、モジュールの Build.cs にある PublicDependencyModuleNames に "GameplayAbilities"、"GameplayTags"、"GameplayTasks" を追加してください。このスキルでは、UAbilitySystemComponent、UGameplayAbility、UGameplayEffect、UAttributeSet、UAbilityTask、Gameplay Cues を扱います。
コンテキスト
.agents/ue-project-context.md が存在する場合は読み込んでください(モジュール名、規約、有効なプラグイン、GAS/ネットワーク設定)。ファイルがなくても作業を中断しないでください。
依頼とコードベースから対象領域を特定してください。妥当な解釈が複数あり、それぞれでコードが異なる場合に限り、質問してください。
| 依頼の内容… | 参照先 |
|---|---|
| ASC の所在、初期化順序、リスポーン、レプリケーションモード | ASC の所有と初期化 |
| アビリティの作成、発動、コスト、クールダウン、ポリシー | Gameplay Abilities |
| モンタージュ、イベント、ターゲティング、タイマー、タグクエリの待機 | Ability Tasks |
| ダメージ、バフ、スタック、実行、免疫、GE コンポーネント | Gameplay Effects |
| 体力/マナの浮動小数点値、クランプ、属性レプリケーション | Attribute Sets |
| アビリティをブロック、付与、キャンセルするタグ、ルーズタグ | Tags in GAS |
| パーティクル、サウンド、ヒット時のエフェクト、Cue Notify クラス | Gameplay Cues |
| Cue の検索パス、グローバルカーブテーブル、プロジェクト設定 | Project Settings |
GAS アーキテクチャ
| 構成要素 | クラス | ヘッダー | 目的 |
|---|---|---|---|
| コンポーネント | UAbilitySystemComponent | AbilitySystemComponent.h | アビリティ、エフェクト、属性、タグを管理します |
| アビリティ | UGameplayAbility | Abilities/GameplayAbility.h | 発動時に行われる処理です |
| エフェクト | UGameplayEffect | GameplayEffect.h | データ駆動型の属性変更です |
| 属性 | UAttributeSet | AttributeSet.h | レプリケートされる FGameplayAttributeData のステータスです |
| タスク | UAbilityTask | Abilities/Tasks/AbilityTask.h | アビリティ内の潜在的な処理ステップです |
Gameplay タグは、要件、付与、ブロッカーとしてこれらすべてに関わります。
ASC の所有と初期化
| 所有者 | 使用する場面 | 備考 |
|---|---|---|
APlayerState | ネットワーク接続されたプレイヤーキャラクター | ASC はポーンの死亡後も存続します。レプリケーションには Mixed を使用してください |
APawn / ACharacter | AI、シングルプレイヤー | 最もシンプルです。AI には Minimal を使用し、ポーン所有の ASC がすべてのクライアントで完全なデータを必要とする場合は Full を使用してください |
ASC を所有または公開するすべてのアクターは、IAbilitySystemInterface を実装します。
// MyCharacter.h
#pragma once
#include "GameFramework/Character.h"
#include "AbilitySystemInterface.h"
#include "MyCharacter.generated.h"
class UAbilitySystemComponent;
UCLASS()
class MYGAME_API AMyCharacter : public ACharacter, public IAbilitySystemInterface
{
GENERATED_BODY()
public:
AMyCharacter();
virtual UAbilitySystemComponent* GetAbilitySystemComponent() const override;
protected:
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "GAS")
TObjectPtr<UAbilitySystemComponent> AbilitySystemComponent;
};
// MyCharacter.cpp
#include "MyCharacter.h"
#include "AbilitySystemComponent.h"
AMyCharacter::AMyCharacter()
{
AbilitySystemComponent = CreateDefaultSubobject<UAbilitySystemComponent>(TEXT("AbilitySystemComponent"));
AbilitySystemComponent->SetIsReplicated(true);
AbilitySystemComponent->SetReplicationMode(EGameplayEffectReplicationMode::Mixed);
}
UAbilitySystemComponent* AMyCharacter::GetAbilitySystemComponent() const
{
return AbilitySystemComponent;
}
InitAbilityActorInfo(OwnerActor, AvatarActor) は、サーバーとクライアントの両方で実行する必要があります。ポーン所有の ASC では、BeginPlay で (this, this) を指定します。PlayerState 所有の ASC では、サーバー側の PossessedBy とクライアント側の OnRep_PlayerState で、(PlayerState, Character) を指定します。両方の経路を含む完全なコード、リスポーン処理、AI 用の例については、gas-setup-patterns.md を参照してください。
EGameplayEffectReplicationMode | シミュレートされたプロキシへの影響 |
|---|---|
Minimal | GE はレプリケートされず、最小限のタグ/Cue データのみ送られます。AI とプレイヤー以外のアクター向けです |
Mixed | 所有する接続には完全な GE が送られ、それ以外には最小限のデータが送られます。プレイヤーキャラクター向けです |
Full | すべての GE がすべてのクライアントにレプリケートされます |
Mixed は、ASC の所有アクターを所有する接続に完全な GE データを送信するため(GameplayEffect.cpp:5240)、PlayerState 所有の ASC と、PlayerController がポーンを所有した後のポーン所有 ASC の両方で機能します。Mixed ではなく Full を選ぶかどうかは、正しさではなく帯域幅に関する判断です。プレイヤー所有の ASC では Minimal は機能しません(AbilitySystemComponent.h:83)。各モードのネットワーク転送コストについては ue-networking-replication を参照してください。
ゲームプレイ能力
// MyFireballAbility.h
#pragma once
#include "Abilities/GameplayAbility.h"
#include "MyFireballAbility.generated.h"
class UGameplayEffect;
UCLASS()
class MYGAME_API UMyFireballAbility : public UGameplayAbility
{
GENERATED_BODY()
public:
UMyFireballAbility();
virtual bool CanActivateAbility(const FGameplayAbilitySpecHandle Handle,
const FGameplayAbilityActorInfo* ActorInfo,
const FGameplayTagContainer* SourceTags = nullptr,
const FGameplayTagContainer* TargetTags = nullptr,
OUT FGameplayTagContainer* OptionalRelevantTags = nullptr) const override;
virtual void ActivateAbility(const FGameplayAbilitySpecHandle Handle,
const FGameplayAbilityActorInfo* ActorInfo,
const FGameplayAbilityActivationInfo ActivationInfo,
const FGameplayEventData* TriggerEventData) override;
virtual void EndAbility(const FGameplayAbilitySpecHandle Handle,
const FGameplayAbilityActorInfo* ActorInfo,
const FGameplayAbilityActivationInfo ActivationInfo,
bool bReplicateEndAbility, bool bWasCancelled) override;
virtual void CancelAbility(const FGameplayAbilitySpecHandle Handle,
const FGameplayAbilityActorInfo* ActorInfo,
const FGameplayAbilityActivationInfo ActivationInfo,
bool bReplicateCancelAbility) override;
protected:
UPROPERTY(EditDefaultsOnly, Category = "GAS")
TSubclassOf<UGameplayEffect> DamageEffect;
};
コンストラクターでポリシーと能力自体のタグを設定します。
// MyFireballAbility.cpp
#include "MyFireballAbility.h"
#include "AbilitySystemBlueprintLibrary.h"
#include "AbilitySystemComponent.h"
UMyFireballAbility::UMyFireballAbility()
{
InstancingPolicy = EGameplayAbilityInstancingPolicy::InstancedPerActor;
NetExecutionPolicy = EGameplayAbilityNetExecutionPolicy::LocalPredicted;
NetSecurityPolicy = EGameplayAbilityNetSecurityPolicy::ClientOrServer;
FGameplayTagContainer Tags;
Tags.AddTag(FGameplayTag::RequestGameplayTag(TEXT("Ability.Skill.Fireball")));
SetAssetTags(Tags);
ActivationOwnedTags.AddTag(FGameplayTag::RequestGameplayTag(TEXT("Ability.Active.Casting")));
ActivationBlockedTags.AddTag(FGameplayTag::RequestGameplayTag(TEXT("State.Stunned")));
CancelAbilitiesWithTag.AddTag(FGameplayTag::RequestGameplayTag(TEXT("Ability.Active.Melee")));
}
SetAssetTagsはコンストラクター内でのみ使用できます。設定したタグはGetAssetTags()で取得します。
| 列挙型 | 値 | 用途 |
|---|---|---|
EGameplayAbilityInstancingPolicy | InstancedPerActor, InstancedPerExecution | InstancedPerActorが既定の選択肢です。複数のコピーを同時に実行できる場合は、実行ごとのインスタンス化を使用します |
EGameplayAbilityNetExecutionPolicy | LocalPredicted, LocalOnly, ServerInitiated, ServerOnly | 応答性が求められるプレイヤーの能力にはLocalPredictedを使用します |
EGameplayAbilityNetSecurityPolicy | ClientOrServer, ServerOnlyExecution, ServerOnlyTermination, ServerOnly | サーバーが管理すべきクライアントからの要求を拒否します |
void UMyFireballAbility::ActivateAbility(const FGameplayAbilitySpecHandle Handle,
const FGameplayAbilityActorInfo* ActorInfo,
const FGameplayAbilityActivationInfo ActivationInfo,
const FGameplayEventData* TriggerEventData)
{
Super::ActivateAbility(Handle, ActorInfo, ActivationInfo, TriggerEventData);
// CommitAbility applies cost and cooldown; it fails if either cannot be paid.
if (!CommitAbility(Handle, ActorInfo, ActivationInfo))
{
EndAbility(Handle, ActorInfo, ActivationInfo, true, true);
return;
}
const FGameplayEffectSpecHandle Spec =
MakeOutgoingGameplayEffectSpec(DamageEffect, GetAbilityLevel());
const FGameplayAbilityTargetDataHandle TargetData =
UAbilitySystemBlueprintLibrary::AbilityTargetDataFromActor(ActorInfo->AvatarActor.Get());
ApplyGameplayEffectSpecToTarget(Handle, ActorInfo, ActivationInfo, Spec, TargetData);
EndAbility(Handle, ActorInfo, ActivationInfo, true, false);
}
2つの処理を異なるタイミングで行う必要がある場合は、コミットを分割します。CommitAbilityCost(Handle, ActorInfo, ActivationInfo)とCommitAbilityCooldown(Handle, ActorInfo, ActivationInfo, ForceCooldown)を使用します。クールダウンのオーバーロードには、追加のconst bool ForceCooldown引数があることに注意してください。
インスタンス化された能力内では、GetAbilitySystemComponentFromActorInfo_Ensured()がASCを返します。アクター情報が設定されていない場合もクラッシュせず、ensureログを出力します。
サーバーから付与して有効化する方法:
const FGameplayAbilitySpecHandle Handle =
ASC->GiveAbility(FGameplayAbilitySpec(UMyFireballAbility::StaticClass(), 1));
ASC->TryActivateAbility(Handle);
ASC->TryActivateAbilityByClass(UMyFireballAbility::StaticClass());
ASC->TryActivateAbilitiesByTag(
FGameplayTagContainer(FGameplayTag::RequestGameplayTag(TEXT("Ability.Skill.Fireball"))));
ASC->ClearAbility(Handle);
能力タスク
能力タスクを使うと、能力を複数フレームにまたがって実行できます。基本パターンは常に、静的ファクトリー → デリゲートをバインド → ReadyForActivation()(UGameplayTaskから継承)です。タスクのデリゲートは動的なので、各ハンドラーにUFUNCTION()が必要です。
// In the ability's header:
UFUNCTION()
void HandleMontageCompleted();
UFUNCTION()
void HandleMontageInterrupted();
#include "Abilities/Tasks/AbilityTask_PlayMontageAndWait.h"
UAbilityTask_PlayMontageAndWait* Task =
UAbilityTask_PlayMontageAndWait::CreatePlayMontageAndWaitProxy(
this, NAME_None, AttackMontage, 1.f);
Task->OnCompleted.AddDynamic(this, &UMyFireballAbility::HandleMontageCompleted);
Task->OnInterrupted.AddDynamic(this, &UMyFireballAbility::HandleMontageInterrupted);
Task->ReadyForActivation();
| タスク | 待機対象 |
|---|---|
UAbilityTask_PlayMontageAndWait | UAnimMontageの終了、ブレンドアウト、中断、またはキャンセル |
UAbilityTask_PlayAnimAndWait | リンク済みアニメーションレイヤー用にスロットで再生する生のUAnimSequence |
UAbilityTask_WaitGameplayEvent | ASCに送信されるゲームプレイイベントタグ(アニメーション通知、ヒット登録) |
UAbilityTask_WaitDelay | 指定した秒数 |
UAbilityTask_WaitTargetData | ターゲットを確定するAGameplayAbilityTargetActor |
UAbilityTask_WaitAttributeChange / ...ChangeThreshold | 変化する、または比較条件を満たす属性 |
UAbilityTask_WaitGameplayTagQuery | ターゲットのタグに対するFGameplayTagQueryがtrueまたはfalseになること |
UAbilityTask_WaitGameplayTagCountChanged | ASC上の1つのタグのカウントが変化すること |
UAbilityTask_WaitGameplayEffectApplied_Self / _Target | タグ要件に一致するGE(または_Queryファクトリー経由のFGameplayTagQuery) |
ファクトリーの完全なシグネチャ、デリゲート名、カスタムタスクのテンプレート、タスク使用時の注意点については、ability-task-reference.mdを参照してください。
ゲームプレイエフェクト
EGameplayEffectDurationType | 動作 |
|---|---|
Instant | 基準値に対して一度だけ実行されます。PostGameplayEffectExecuteを発火します |
HasDuration | DurationMagnitude秒間、現在値に集約されます |
Infinite | 明示的に削除されるまで集約されます |
const FGameplayEffectContextHandle Ctx = ASC->MakeEffectContext();
const FGameplayEffectSpecHandle Spec =
ASC->MakeOutgoingSpec(UMyDamageEffect::StaticClass(), Level, Ctx);
Spec.Data->SetSetByCallerMagnitude(
FGameplayTag::RequestGameplayTag(TEXT("SetByCaller.Damage")), 75.f);
ASC->ApplyGameplayEffectSpecToSelf(*Spec.Data.Get());
ASC->ApplyGameplayEffectSpecToTarget(*Spec.Data.Get(), TargetASC);
ASC->RemoveActiveGameplayEffect(ActiveHandle);
ASC->RemoveActiveGameplayEffectBySourceEffect(UMyDamageEffect::StaticClass(), nullptr);
モディファイアーの演算はEGameplayModOp(名前空間付きの列挙型なので、値はTEnumAsByte<EGameplayModOp::Type>)で定義されています。集約の計算式は
((BaseValue + AddBase) * MultiplyAdditive / DivideAdditive * MultiplyCompound) + AddFinal
です。
| 値 | 意味 |
|---|---|
AddBase | ほかの処理より先に基準値へ加算します |
MultiplyAdditive | 乗数を合計し、その合計を計算途中の値に乗算します |
DivideAdditive | 除数を合計し、その合計で計算途中の値を除算します |
MultiplyCompound | 計算途中の値に乗算します。他の複合乗算と累積します |
AddFinal | すべての乗算の後に加算します |
Override | 計算結果を置き換えます |
以前はUGameplayEffectのモノリシックなプロパティだった動作は、現在はGameplayEffectComponents/以下のUGameplayEffectComponentサブクラスにあります。スタック、マグニチュード計算、UGameplayEffectExecutionCalculation、周期エフェクト、無効化、クエリ、ライフサイクルデリゲート、コンポーネントの全一覧については、gameplay-effect-reference.mdを参照してください。
属性セット
// MyHealthSet.h
#pragma once
#include "AttributeSet.h"
#include "AbilitySystemComponent.h"
#include "MyHealthSet.generated.h"
UCLASS()
class MYGAME_API UMyHealthSet : public UAttributeSet
{
GENERATED_BODY()
public:
UMyHealthSet();
virtual void PreAttributeChange(const FGameplayAttribute& Attribute, float& NewValue) override;
virtual void PostGameplayEffectExecute(const struct FGameplayEffectModCallbackData& Data) override;
virtual void GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& OutLifetimeProps) const override;
UPROPERTY(BlueprintReadOnly, ReplicatedUsing = OnRep_Health, Category = "Health")
FGameplayAttributeData Health;
ATTRIBUTE_ACCESSORS_BASIC(UMyHealthSet, Health)
UPROPERTY(BlueprintReadOnly, ReplicatedUsing = OnRep_MaxHealth, Category = "Health")
FGameplayAttributeData MaxHealth;
ATTRIBUTE_ACCESSORS_BASIC(UMyHealthSet, MaxHealth)
protected:
UFUNCTION()
void OnRep_Health(const FGameplayAttributeData& OldHealth);
UFUNCTION()
void OnRep_MaxHealth(const FGameplayAttributeData& OldMaxHealth);
};
ATTRIBUTE_ACCESSORS_BASIC は、GetHealthAttribute()、GetHealth()、SetHealth()、InitHealth() を生成します。追加のアクセサーが必要なプロジェクトでは、GAMEPLAYATTRIBUTE_PROPERTY_GETTER、GAMEPLAYATTRIBUTE_VALUE_GETTER、GAMEPLAYATTRIBUTE_VALUE_SETTER、GAMEPLAYATTRIBUTE_VALUE_INITTER をチェーンする独自のマクロを定義します。
各 OnRep_ の本体は、GAMEPLAYATTRIBUTE_REPNOTIFY(UMyHealthSet, Health, OldHealth) の呼び出し 1 つです。また、すべての属性に DOREPLIFETIME_CONDITION_NOTIFY(UMyHealthSet, Health, COND_None, REPNOTIFY_Always) の行が必要です。クランプ処理を含む完全な .cpp は、gas-setup-patterns.md にあります。
| フック | 発生タイミング | 用途 |
|---|---|---|
PreAttributeChange | 現在値が再計算されるたび | 現在値のみのクランプ |
PreAttributeBaseChange | 基本値の書き込み前(const) | 基本値のクランプ |
PostGameplayEffectExecute | インスタント GE、または周期的 GE の 1 周期が基本値を書き込んだ後 | 死亡、被弾リアクション、ゲームイベント |
PostAttributeChange | 現在値の変更後 | 派生状態への反応 |
登録と読み取り:
// Constructor of the ASC owner — the ASC finds subobject attribute sets automatically:
HealthSet = CreateDefaultSubobject<UMyHealthSet>(TEXT("HealthSet"));
// Runtime, authority only:
UMyHealthSet* NewSet = NewObject<UMyHealthSet>(this);
ASC->AddSpawnedAttribute(NewSet);
const float CurrentHealth = ASC->GetNumericAttribute(UMyHealthSet::GetHealthAttribute());
1 つの ASC に複数の UAttributeSet サブクラスを格納できますが、各クラスのインスタンスは 1 つだけです。
GAS のタグ
タグの定義(ネイティブタグマクロ、.ini タグソース)、コンテナのマッチング、FGameplayTagQuery のセマンティクスについては、ue-gameplay-tags-messaging を参照してください。GAS 固有の内容は次のとおりです。
// On the ability CDO (constructor): tags granted while the ability runs, and the gates.
ActivationOwnedTags.AddTag(CastingTag);
ActivationRequiredTags.AddTag(WeaponEquippedTag);
ActivationBlockedTags.AddTag(StunnedTag);
BlockAbilitiesWithTag.AddTag(MeleeTag);
CancelAbilitiesWithTag.AddTag(ChannelTag);
// On the ASC: query and react.
ASC->HasMatchingGameplayTag(StunnedTag);
const FGameplayTagContainer& Owned = ASC->GetOwnedGameplayTags();
ASC->RegisterGameplayTagEvent(StunnedTag, EGameplayTagEventType::NewOrRemoved)
.AddUObject(this, &AMyCharacter::HandleStunnedTagChanged);
コールバックは void HandleStunnedTagChanged(const FGameplayTag Tag, int32 NewCount); として宣言します。UFUNCTION() は不要です。タグイベントは通常のマルチキャストデリゲートです。
ルーズタグは GE を介さず、直接設定します。3 番目の引数でタグのレプリケーション方法を選択します。
ASC->AddLooseGameplayTag(StunnedTag); // local only
ASC->AddLooseGameplayTag(BuffedTag, 1, EGameplayTagReplicationState::TagOnly); // tag to all
ASC->AddLooseGameplayTag(BuffedTag, 1, EGameplayTagReplicationState::CountToOwner);// + count to owner
ASC->RemoveLooseGameplayTag(BuffedTag, 1, EGameplayTagReplicationState::TagOnly);
ASC->SetLooseGameplayTagCount(BuffedTag, 3, EGameplayTagReplicationState::TagAndCountToAll);
EGameplayTagReplicationState の値は、None、SimulatedTagOnly、TagOnly、CountToOwner、TagAndCountToAll です。None 以外の値はサーバーで追加する必要があります。
Gameplay Cues
キューはコスメティック用途に限られます。タグのプレフィックスは GameplayCue. です。GE は GameplayCues 配列を介してキューを発火させるほか、コードから直接発火させることもできます。
ASC->ExecuteGameplayCue(HitCueTag, ASC->MakeEffectContext()); // one-shot
ASC->AddGameplayCue(BuffCueTag); // persistent
ASC->RemoveGameplayCue(BuffCueTag);
const bool bActive = ASC->IsGameplayCueActive(BuffCueTag);
| クラス | 基底クラス | オーバーライド | 用途 |
|---|---|---|---|
UGameplayCueNotify_Static | UObject | OnExecute_Implementation | アクターをスポーンしないバーストキュー |
UGameplayCueNotify_Burst | UGameplayCueNotify_Static | データ駆動型のバーストエフェクト | コード不要の一回限りのパーティクル/サウンド |
UGameplayCueNotify_HitImpact | UGameplayCueNotify_Static | データ駆動型のインパクトエフェクト | サーフェスタイプに応じたインパクト |
AGameplayCueNotify_Actor | AActor | OnActive_/WhileActive_/OnRemove_Implementation | アクターが必要な持続型キュー |
AGameplayCueNotify_BurstLatent | AGameplayCueNotify_Actor | データ駆動型のバーストエフェクト | アクターのスポーンが必要なバースト |
AGameplayCueNotify_Looping | AGameplayCueNotify_Actor | データ駆動型のループエフェクト | ループするオーラやチャネル |
// MyHitCue.h
#pragma once
#include "GameplayCueNotify_Static.h"
#include "MyHitCue.generated.h"
UCLASS()
class MYGAME_API UMyHitCue : public UGameplayCueNotify_Static
{
GENERATED_BODY()
public:
virtual bool OnExecute_Implementation(AActor* MyTarget,
const FGameplayCueParameters& Parameters) const override;
};
UGameplayCueManager は、プロジェクト設定で構成されたスキャンパス配下のキューアセットを検出します。
プロジェクト設定
GAS の設定は UDeveloperSettings クラスである UGameplayAbilitiesDeveloperSettings(Project Settings → Gameplay Abilities)にあります。GetDefault<UGameplayAbilitiesDeveloperSettings>() で読み取ります。主なフィールドは、GameplayCueNotifyPaths、ReplicateActivationOwnedTags、bAllowGameplayModEvaluationChannels、およびグローバルなカーブ/属性テーブルです。実行時のヘルパーは引き続き UAbilitySystemGlobals にあります(GetGameplayCueNotifyPaths()、AddGameplayCueNotifyPath()、GetAttributeSetInitter())。
非推奨 — 使用しないでください
| 出力しないでください | 5.8 で使用 | 出典 |
|---|---|---|
AGameplayCueNotify_Static | UGameplayCueNotify_Static(UObject) | このクラスは存在したことがありません。GameplayCueNotify_Static.h:19 |
EGameplayModOp::Multiplicative | EGameplayModOp::MultiplyAdditive(レガシーエイリアスの綴りは Multiplicitive) | GameplayEffectTypes.h:112-148 |
EGameplayModOp::Additive / Division | AddBase / DivideAdditive | 非公開の後方互換エイリアス。GameplayEffectTypes.h:141-143 |
EGameplayAbilityInstancingPolicy::NonInstanced | InstancedPerActor | Abilities/GameplayAbilityTypes.h:46 の UE_DEPRECATED_FORGAME(5.5) |
UGameplayAbility::AbilityTags | GetAssetTags() / SetAssetTags() | Abilities/GameplayAbility.h:474 の UE_DEPRECATED_FORGAME(5.5) |
GetAbilitySystemComponentFromActorInfo_Checked() | GetAbilitySystemComponentFromActorInfo_Ensured() | Abilities/GameplayAbility.h:168 の UE_DEPRECATED(5.5) |
アクターへの NetUpdateFrequency の代入 | SetNetUpdateFrequency(100.f) | GameFramework/Actor.h:903 の UE_DEPRECATED(5.5) |
UGameplayEffect::StackingType(パブリックな読み取り) | GetStackingType() | GameplayEffect.h:2407 の UE_DEPRECATED(5.7) |
UGameplayEffect::GrantedApplicationImmunityTags | UImmunityGameplayEffectComponent | GameplayEffect.h:2379 の UE_DEPRECATED(5.3) |
AddReplicatedLooseGameplayTag | AddLooseGameplayTag(Tag, Count, EGameplayTagReplicationState::CountToOwner)(非推奨メッセージに記載された置き換え先。クライアントでカウントが不要な場合は TagOnly) | 関数は削除済み(5.8 に宣言なし)。バッキングメンバーの ReplicatedLooseTags は AbilitySystemComponent.h:1941 で UE_DEPRECATED(5.7) |
FGameplayAbilitySpec::DynamicAbilityTags | GetDynamicSpecSourceTags() | GameplayAbilitySpec.h:242 の UE_DEPRECATED(5.5) |
UAbilitySystemBlueprintLibrary::MakeSpecHandle | MakeSpecHandleByClass | AbilitySystemBlueprintLibrary.h:249 の UE_DEPRECATED(5.5) |
UAbilitySystemGlobals の設定メンバー | GetDefault<UGameplayAbilitiesDeveloperSettings>() | AbilitySystemGlobals.h 全体にわたる UE_DEPRECATED(5.5) |
FGameplayEffectSpec::GetModifierMagnitude(ModifierIdx, bFactorInStackCount) | GetModifierMagnitude(int32 ModifierIdx) | GameplayEffect.h:1153 の UE_DEPRECATED(5.6) |
FActiveGameplayEffectHandle(int32)、ResetGlobalHandleMap()、RemoveFromGlobalMap() | FActiveGameplayEffectHandle::GenerateNewHandle() または GetInstantExecutedHandle()。グローバルマップは廃止されています | ActiveGameplayEffectHandle.h:30,66,69 の UE_DEPRECATED(5.8) |
よくある間違い
ポーンのみに IAbilitySystemInterface を実装する: ASC が PlayerState にある場合、PlayerState にもインターフェースを実装する必要があります。そうしないと、所有者に対する UAbilitySystemBlueprintLibrary::GetAbilitySystemComponent が失敗します。
サーバーでのみ InitAbilityActorInfo を呼び出す: クライアントでも呼び出す必要があります。サーバー側の経路は PossessedBy、クライアント側の経路は OnRep_PlayerState です。クライアント側で呼び出さないと、属性変更デリゲートが所有クライアントで一度も実行されません。
初期化前に GE を適用する: InitAbilityActorInfo の実行前にアビリティを付与したりエフェクトを適用したりすると、ASC にアクター情報が設定されず、属性セットも登録されません。
誤ったフックでクランプする: PreAttributeChange はアグリゲーターの再計算ごとに呼び出されるため、クランプできるのは NewValue のみです。死亡、ヒットリアクション、ゲームプレイイベントは、実行(即時 GE および周期的なティック)に対してのみ実行される PostGameplayEffectExecute に記述します。
CommitAbility を忘れる: アビリティは実行されますが、コストが消費されず、クールダウンも開始されません。
ルーズタグがレプリケートされると思い込む: AddLooseGameplayTag(Tag) のデフォルトは EGameplayTagReplicationState::None です。サーバーから TagOnly または CountToOwner を渡すか、GE を通じてタグを付与してください。
スタックが気づかないうちに上限に達する: GetStackLimitCount() を超える適用は、エラーなしで拒否されます。スタックが追加されたと判断する前に GetCurrentStackCount(Handle) を確認してください。
権限チェックなしで BeginPlay にスタートアップエフェクトを設定する: 後から参加したクライアントで再適用されます。すべての GiveAbility とスタートアップ GE を HasAuthority() で保護してください。
PlayerState のない AI: ASC を AI キャラクターに配置し、InitAbilityActorInfo(this, this) を呼び出して、レプリケーションを Minimal に設定します。
関連スキル
ue-gameplay-tags-messaging— タグ定義(ネイティブタグマクロ、ini タグソース)、コンテナー、FGameplayTagQuery、ゲームプレイメッセージングue-networking-replication—DOREPLIFETIMEの各種バリエーション、RPC、予測キー、プッシュモデルue-animation-system— モンタージュアビリティタスクが操作するモンタージュアセット、通知、スロットue-character-movement— ルートモーションアビリティタスクが操作する移動モードue-cpp-foundations—UPROPERTY/UFUNCTION指定子、デリゲート、TSubclassOf、サブシステムue-data-assets-tables— 属性の初期化とFScalableFloatの基盤となるUCurveTableおよびUDataTableアセットue-state-trees— State Tree タスクから実行するアビリティue-actor-component-architecture— コンポーネントの作成、サブオブジェクトの登録、サブオブジェクトのレプリケーションue-gameplay-framework— PlayerState と Pawn のライフサイクル、および GAS を使わないダメージ(TakeDamage、UDamageType)ue-input-system— アビリティ入力 ID にバインドされた Enhanced Input アクションue-game-features— ゲームフィーチャープラグインからのアビリティと属性セットの付与ue-niagara-effects— Niagara システム、ユーザーパラメーター、データインターフェース、データチャネルue-ui-umg-slate— UMG ウィジェット、Slate、Common UI、MVVM