ぼっちプログラマのメモ

Unreal Engineについて書いたりしてます

【UE5】UPROPERTYのInterfaceフィルタリング指定子まとめ(MustImplement / ObjectMustImplement / AllowedClasses)

はじめに

UE5.8 の Mover プラグインのソースを眺めていたら、見慣れないメタ指定子に遭遇しました。

// Mover/Source/Mover/Public/MoverComponent.h:923
UPROPERTY(EditDefaultsOnly, EditFixedSize, Instanced, Category = Mover, 
meta = (NoResetToDefault, ObjectMustImplement = "/Script/Mover.MovementSettingsInterface"))
TArray<TObjectPtr<UObject>> SharedSettings;

ObjectMustImplement...?MustImplement ならよく見るんですが、ObjectMustImplement は見慣れないですしググっても出てこない… なにやら便利そうなので、Object/Classプロパティのフィルタリングで使う他のmeta指定子と合わせて調査・検証結果をまとめてみました。 (GetAllowedClassesもググっても情報出てこないですし)

検証環境:UE5.8 Preview

本記事の結論

少し長くなるので結論早見表・結論をぺたり

メタ 非Instanced (Asset picker) Instanced (EditInline) Class picker (TSubclassOf)
MustImplement
ObjectMustImplement
AllowedClasses
GetAllowedClasses

状況に応じてフィルタリング処理を変えたい場合はGetAllowedClasses を利用(後述の仕様に注意)。  

固定で良い場合は…

  •  非Instanced な Object: AllowedClasses
  •  Instanced Object:ObjectMustImplement
  •  Class系プロパティ:MustImplement

( AllowedClasses でも実装可能だが、速度面・安全面から MustImplement /ObjectMustImplementを利用した方が無難 )

以降は詳細や調査内容・結果について

続きを読む

【UE5】小ネタ:指定した関数がBPで実装・Overrideされているかを判定する方法

Moverの勉強中に見かけたコードが面白かったので自分用メモ

// 指定した UFunction が Blueprint 側で実装されているかを判定する
auto IsImplementedInBlueprint = [](const UFunction* Func) -> bool
{
    return Func && ensure(Func->GetOuter())
        && Func->GetOuter()->IsA(UBlueprintGeneratedClass::StaticClass());
};

// Blueprint 実装を確認したい関数名
static FName ProduceInputBPFuncName = FName(TEXT("OnProduceInputInBlueprint"));

// 現在のクラスから対象の関数を検索
UFunction* ProduceInputFunction = GetClass()->FindFunctionByName(ProduceInputBPFuncName);

// 対象関数が Blueprint 側に実装されているかをキャッシュ
bHasProduceInputinBpFunc = IsImplementedInBlueprint(ProduceInputFunction);

指定されているOnProduceInputInBlueprint関数は以下のように宣言されており、

UFUNCTION(BlueprintImplementableEvent, DisplayName="On Produce Input", meta = (ScriptName = "OnProduceInput"))
FMoverInputCmdContext OnProduceInputInBlueprint(float DeltaMs, FMoverInputCmdContext InputCmd);

BP側で実装が書かれてれば実行、されてなければスキップという処理が行われてます。

void AMoverExamplesCharacter::ProduceInput_Implementation(int32 SimTimeMs, FMoverInputCmdContext& InputCmdResult)
{
    OnProduceInput((float)SimTimeMs, InputCmdResult);

    if (bHasProduceInputinBpFunc)
    {
        InputCmdResult = OnProduceInputInBlueprint((float)SimTimeMs, InputCmdResult);
    }
}

上記のコードはAMoverExamplesCharacter からの引用ですが、その他だと UGameplayAbility のコンストラクタで同様のコードが使われてたりして面白かったです。 おしまい

【UE5】UE5.7 → UE5.8 で同梱プラグインが 100 個増えていた話

はじめに

皆お待ちかねのUE5.8、「Preview版は5月、正式リリースは6月中旬予定」ですが、GitHubでは5.8ブランチが切られています。 t.co https://github.com/EpicGames/UnrealEngine/tree/5.8

せっかくのGWなので色々調べてみるか~と覗いてみたら…「めちゃプラグイン増えてるやん!」となったので、自分用メモも兼ねてUE5.7 -> UE5.8にかけて増えた・減ったプラグインをまとめてみました。なお、リストの作成をするにあたってClaudeCode, Codexを活用してます。軽く確認はしていますが、実際の機能概要・詳細は自身で確認するのを推奨します(気になるプラグインは別途ちゃんと検証・記事化する予定)。

プラグインの増減

集計
プラグイン総数 5.7: 777 → 5.8: 877
追加 106
削除 / 移動 6

ざっくりまとめ

  1. AIを使ってアセット作成・作業支援プラグインが沢山追加
  2. ML駆動アニメやUAFの機能追加などアニメーション関連の機能強化
  3. Microsoft GDKの公開範囲の緩和によって、プラグインがエンジン同梱に
  4. 大規模メッシュ用のMesh Partitionが追加(内部呼称 "MegaMesh")
  5. Insights プロファイラの強化( HTTP / MessageBus / Niagara / RenderTrace)
  6. Electra コーデックの追加(APV / AV1 / NVDEC / RTSP / TMV)
  7. NiagaraUIRendererやModularViewportsなど、便利機能がちょこちょこ追加
続きを読む

【UE5】猫でもざっくり分かる新しいカメラシステム「Gameplay Camera」

この記事はUnreal Engine (UE) Advent Calendar 2025の13日目の記事です!今年も沢山の方が参加してくれて嬉しい!ありがとうございます!!!

qiita.com

はじめに

www.youtube.com

Gameplay Cameraという新しいカメラシステムがUE5.5にてExperimental機能としてリリースされ、UE5.8では遂にBeta機能になる(はず)ということをご存知でしょうか?

他の機能と比べるとあまり話題にはなっていませんが、UE5.5-5.7で改良を重ねたことで機能が豊富になってきたり、GameAnimationSampleにおけるカメラ制御がGameplayCameraに完全に置き換わっていたりと、今後のUE開発にてほぼ必須になりそうな気配を感じるこの頃です(制作者が以前にFrostbiteエンジンでカメラシステムを作っていたり既に複数のゲームスタジオで実践導入 & FBを受けていることも期待できるポイント)。

が、公式ドキュメントの内容がUE5.5時点のもので止まっていたり、UE5.5→5.6への更新時に入った大規模な変更によって情報が錯綜していたりと、現状はとっつきづらい状況になってしまっています。

そこで、本記事ではUE5.7時点におけるGameplay Cameraの概要・Tipsについて纏めてみます。UE5.7→UE5.8でBeta機能になることで変化する部分は確実にありますが、概念や基本的な考え方は変わらないと思うので、今まとめても損はないはず…の精神でいきます!

といった方針の記事 & 既にGameAnimationSampleという最高のサンプルがあるので、具体的な操作手順に関してはあまり触れません。サンプルや今後の機能更新を読み解く上での前提知識・参考情報の共有がメインになります。

参考

【オススメ】GameplayCameraの作者が書いているブログ記事 https://ludovic.chabant.com/blog/category/programming/game-development/unreal-engine/

【オススメ】GameAnimationSample ( /Content/Blueprints/Cameras 以下) https://www.fab.com/ja/listings/880e319a-a59e-4ed2-b268-b32dac7fa016

UE5.6 || UPDATES For New Gameplay Cameras System In Unreal Engine https://youtu.be/hl6smRV9Tr8?si=UKOd6YIbVcMFh_ZA

UE5.5 リリースノート https://dev.epicgames.com/documentation/ja-jp/unreal-engine/unreal-engine-5-5-release-notes?application_version=5.5#ゲームプレイカメラ

UE5.6 リリースノート https://dev.epicgames.com/documentation/ja-jp/unreal-engine/unreal-engine-5-6-release-notes?application_version=5.6#ゲームプレイカメラ(実験的機能))

UE5.7 リリースノート ( Gameplay - Cameras ) https://dev.epicgames.com/documentation/ja-jp/unreal-engine/unreal-engine-5-7-release-notes#gameplay-2

続きを読む

【UE5】UMGエディタにPreviewモードを追加する方法

はじめに

UE5.5からWidgetPreview機能が追加され、PIE実行しなくても動作確認をある程度できるようになりました! kumasan-debug.hatenablog.com

WidgetPreviewアセット or WidgetBPの右クリックメニューからPreviewできて便利です。

ただ、UMGエディタからPreviewするには手数が多くて少し面倒です…UMGエディタからボタン一つでPreviewできたらなぁ…

できるよ!!!

Previewボタンを追加する方法

コンソールコマンドの↓を実行するだけ!

UMG.EnablePreviewMode 1

または、DefauleEditor.iniに

[ConsoleVariables]
UMG.EnablePreviewMode=1

これだけ!おしまい!

【UE5】float値がフレーム単位で調整可能になるメタデータ指定子「FrameTimeEditor」について

本記事の結論

  • メタデータ指定子FrameTimeEditorを使うと、float値をフレーム単位で設定可能に

      UPROPERTY(EditAnywhere, BlueprintReadWrite, meta=(FrameTimeEditor))
      float TimeFloat;
    
  • ただし、Chooserプラグインを有効化する必要あり

  • 30fpsベースでの計算なことに注意
    • 現状は60fpsベースにするにはエンジン改造 or 自作する必要あり
    • FFrameTimeCustomization参照

検証環境:UE5.6.0

続きを読む

【UE5】StaticMeshアセットをD&Dした際、プロジェクト固有のStaticMeshActor・Componentが使われるようにする方法

はじめに

プロジェクトが進んでいくと、UE標準のComponentを拡張したくなることがしばしばあります。しかし、エンジン改造による拡張は色々面倒・大変なので、標準Componentの派生クラスをプロジェクト側で用意して拡張することが比較的多いと思います。

ここで問題になるのが、「UE標準ではなくプロジェクト側のComponentを使用することをどう徹底するか?」です。ここが曖昧になって、UE標準版と拡張版が混在していると様々なトラブルの元になります。そして、ヒューマンはミスをする生き物なので「UE標準版を使わせない」ための仕組みが重要になってきます。

この仕組みを実現する際、以下のような選択肢がまず挙がってきますが、

  1. EditorUtility機能で、監視 & 拡張版への置き換え処理を用意する
  2. DataValidation機能で、UE標準版を使用した際にエラー・警告を出す
    1. Unreal Engine でのデータ検証 | Unreal Engine 5.6 ドキュメンテーション | Epic Developer Community
    2. UE4.23から入った「Editor Validator Subsystem」を使って、アセット保存時などで走るチェック処理(Validate Assets)を拡張しよう! - ぼっちプログラマのメモ

今回はもう少し踏み込んで、「対象Assetをレベル上にD&Dした際に、自動的に拡張版ComponentActorが使われる」という対応をエンジン改造なしで実現してみました!

具体的には、StaticMeshアセットをD&Dすると、拡張版StaticMeshComponentを持つStaticMeshActorがレベルに配置されるようにしています。こうすることで、例えば背景担当のアーティストさんは特殊な操作をしなくても拡張版StaticMeshComponentに追加された便利機能を活用できます!(↑の例では、ライトマップ解像度の調整用パラメータを拡張版に追加してます。便利)

と実現内容はシンプルですが、この辺りの情報があまりなかったり、UEのアップデートで一部プロパティが機能してなかったりで地味に対応が大変だったので…今回記事にしました…(´;ω;`)

なお、検証環境はUE5.6.0 です

続きを読む