Unreal Engine 向けのモジュール式・レプリケーション対応 XP/レベリングプラグイン(C++ および Blueprint 対応)。データ駆動のカーブ、アセンションによるレベル上限、マイルストーン報酬、オーバーフロー XP の変換に対応しています。

AMLSLevelComponent を追加できます。Ascend を呼び出すことでのみ突破できます。AMLS Level Component を Actor(お使いのキャラクター)に追加し、データアセットを Level Config Data に割り当てます。AddXP を呼び出します。OnLevelUpDelegate / OnXPChangedDelegate にバインドします。// C++ の例
if (UAMLSLevelComponent* Level = Actor->FindComponentByClass<UAMLSLevelComponent>()) { Level->OnLevelUpDelegate.AddDynamic(this, &AMyClass::HandleLevelUp); Level->AddXP(250); // サーバーのみ }
UAMLSLevelComponent)レベル 1、XP 0、アセンションフェーズ 1 から開始します。Authority と記載された関数は、サーバー上でのみ実行されます。
| 関数 | 種類 | 説明 |
|---|---|---|
| AddXP(Amount) | Authority | XP を加算し、連続するレベルアップを処理します。絶対最大レベルでは、XP はオーバーフロー変換に回されます。 |
| SetLevel(NewLevel) | Authority | XP を加算し、連続するレベルアップを処理します。絶対最大レベルでは、XP はオーバーフロー変換に回されます。 |
| AddLevels(LevelsToAdd) | Authority | 固定数のレベルを付与します。アセンションの上限が考慮されます。 |
| Ascend() | Authority | CanAscend() が true の場合、次のアセンションフェーズへ移行します。 |
| ResetProgression() | Authority | レベル、XP、フェーズを初期値にリセットします(プレステージ用途に便利です)。 |
| LoadProgressionSaveData(Data) | Authority | セーブ用構造体から進行状況を復元します。 |
| GetProgressionSaveData() | Pure | FAMLSProgressionSaveData のスナップショットを返します。 |
| GetCurrentLevel /GetCurrentXP | Pure | 現在の値。 |
| GetXPRequiredForNextLevel | Pure | 現在のレベルを完了するために必要な XP。 |
| GetRemainingXPToNextLevel | Pure | 現在のレベルを完了するために必要な XP。 |
| GetXPProgressPercentage | Pure | 0.0~1.0 のプログレスバー値。 |
| GetCurrentLevelCap | Pure | 0.0~1.0 のプログレスバー値。 |
| GetCurrentLevelCap | Pure | 現在のアセンションフェーズにおける固定上限。 |
| IsAtCurrentLevelCap/IsAtAbsoluteMaxLevel | Pure | 上限の判定。 |
| CanAscend | Pure | 現在の上限に達していて、かつ絶対最大レベルではない場合に true。 |
| GetCurrentAscensionPhase | Pure | 現在のフェーズ(1 から開始)。 |
| GetRequiredAscensionPhaseForLevel | Pure | 指定したレベルに到達するために必要なフェーズ。 |
| HasReachedLevel(Level) | Pure | 現在のレベルが目標以上の場合に true。 |
| GetLevelStatus(Level) | Pure | FAMLSLevelStatusData を返します:bHasReached, bRequiresAscension, bIsAbsoluteMaxLevel, bIsInvalid。レベルマップ UI に最適です。 |
| GetRewardsForLevel(Level) | Pure | レベルに設定された報酬アイテム。 |
UAMLSLevelUpConfigDataAsset)| プロパティ | デフォルト | 説明 |
|---|---|---|
| Max Level | 50 | 絶対最大レベル(最小 2)。 |
| XP Curve Method | Formulaic | Explicit Array、Formulaic、Float Curve Asset のいずれか。 |
| System ID | Player | 報酬プロセッサをこのアセットに対応付けるための識別子。 |
| Use Ascension System | false | Ascend() の呼び出しが必要なレベル上限を有効にします。 |
| Ascension Level Caps | 空 | フェーズごとの上限。例:[20, 40]。 |
| Explicit XP Thresholds | 空 | インデックス 0 = レベル 1 を抜けるために必要な XP。不足している項目は Level × FormulaBaseXP にフォールバックします。 |
| Formula Base XP / Multiplier / Exponent | 100 / 1.2 / 1.5 | 下記の数式を参照してください。 |
| Visual Curve Asset | なし | Float カーブ:X = レベル、Y = 必要 XP。 |
| Reward Milestones | 空 | レベルごとの (RewardTag, RewardCount) のリスト。 |
| Custom Processor Milestones | 空 | レベルごとの報酬プロセッサクラス。 |
| Convert Overflow XP To Currency | false | 最大レベルでのオーバーフロー変換を有効にします。 |
| Overflow Currency Tag | なし | 変換イベントと共に送信されるタグ。 |
| Overflow Conversion Multiplier | 10.0 | 通貨 = max(1, round(XP × multiplier))。 |
XP required = round( FormulaBaseXP × Level ^ FormulaExponent × FormulaMultiplier ) (minimum 1)
デフォルト設定では、レベル 1 に 120 XP、レベル 10 に約 3,795 XP が必要です。Max Level 以上では XP は不要です。
アセンションを使うと、プレイヤーの行動(素材、クエスト、ボスなど)を条件に進行を制限できます。Use Ascension System を有効にして、上限を定義します:
AscensionLevelCaps = [20, 40, 50] // フェーズ 1 の上限は 20、フェーズ 2 は 40、フェーズ 3 は 50
Ascend() を呼び出します。OnAscendedDelegate が発火し、保持されていた XP でレベルアップが続行されます。CanAscend() を使って Ascend ボタンを有効化し、GetLevelStatus() を使ってレベルマップにアセンションのロックを表示できます。Reward Milestones に、対象レベルと報酬アイテム(Gameplay Tag + 個数)のリストを持つエントリを追加します。レベルに到達すると、OnRewardsProcessedDelegate がアイテムをブロードキャストするので、ゲーム側で付与できます。
カスタムロジックが必要な場合は、UAMLSLevelUpRewardProcessor を(C++ または Blueprint で)サブクラス化し、対象レベルに対して Custom Processor Milestones に登録します。
NativeProcessTag をオーバーライドします。IAMLSLevelableInterface を実装している必要があります。実装していない場合、呼び出しは警告とともにスキップされます。// C++
class UMyRewardProcessor : public UAMLSLevelUpRewardProcessor
{
protected:
virtual void NativeProcessTag(AActor* Target, const TArray<FAMLSLevelRewardItem>& Items, int32 Level) override;
};IAMLSLevelableInterface)コールバックを受け取りたい Actor に実装します。Blueprint から実装できます。
| 関数 | 説明 |
|---|---|
| GetLevelComponent() | Actor の UAMLSLevelComponent を返します。 |
| OnLevelUp(NewLevel) | レベルアップ時に呼び出されます。ステータスの適用、回復、コンテンツの解放などに使います。 |
| イベント | パラメータ | 発火タイミング |
|---|---|---|
| OnLevelUpDelegate | NewLevel, Owner | レベルを獲得したとき(レベルがレプリケートされたクライアントでも発火します)。 |
| OnXPChangedDelegate | CurrentXP, XPToNextLevel, Percent | XP またはレベルが変化したとき。BeginPlay 時にも発火します。 |
| OnRewardsProcessedDelegate | LevelAchieved, Rewards, Owner | 報酬またはプロセッサが設定されたレベルに到達したとき。 |
| OnOverflowXPConvertedDelegate | WastedXP, CurrencyEarned, CurrencyTag, Owner | 変換が有効な状態で、最大レベルで XP を獲得したとき。 |
| OnAscendedDelegate | NewAscensionPhase, Owner | アセンションフェーズが変化したとき。 |
FAMLSProgressionSaveData には SavedLevel, SavedXP, SavedAscensionPhase が含まれ、SaveGame 指定子が付いています。SaveGame オブジェクトに保存してください。
// セーブ SaveObj->Progression = LevelComp->GetProgressionSaveData(); // ロード(サーバー) LevelComp->LoadProgressionSaveData(SaveObj->Progression);
ロード時には、値が現在の上限に対して検証され、保留中の XP が処理されます。
bCanEverTick = false を設定しているため、フレームごとのコストは発生しません。Reward.Stat などの報酬タグは、プロジェクトの Gameplay Tags に存在している必要があります。