ぼっちプログラマのメモ

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

【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 です

続きを読む

【UE5】Project LauncherのProfile(.ulp2)をプロジェクト側で管理したかったけど…大変そうだったという話

はじめに

突然ですが、UE5のProject Launcher機能って便利ですよね!

「テストで必要なレベルのみをCook ▶ 実機に転送 ▶ 起動」までを 1クリックでできるので、実機上の確認・テストプレイが捗ります!また、それらの設定をProfileとして編集・管理できるので、目的・用途に応じたProfileを沢山用意している人も多いと思います。

dev.epicgames.com (余談ですが、UE5.6からProject Laucnherが急に新しくなってビックリ!)

チームで開発をしていると、このProfileを共有・バージョン管理したくなります。が、共有するには<エンジンのルート>/Engine/Programs/UnrealFrontend/Profiles にProfileのデータ(.ulp2)を配置する必要があります。そのため、ランチャー版の場合はProfileデータを該当フォルダにコピーする作業をメンバー全員がすることになります。

…色々めんどくさい!ビルド版のEngineの場合でも、複数のプロジェクトが同時進行する時にトラブル起きそう!プロジェクト内のフォルダでProfileを管理したい!例えば、Config/Profiles とかでさ!

ということで何とかできないか?とエンジンコードなどを調べてみたという話です。 なお、検証環境は UE5.6.0 です。

結論

で先に結論を…

  • エンジン外にあるProfileデータをエディタに認識させることはできる(エンジン改造なしで)
  • が、Profileデータの読み書き処理にて/Engine/Programs/UnrealFrontend/Profiles が直書きされてるため、エディタ上で↑のProfileを編集するとエンジン側にデータが複製されてしまう
  • なので、ちゃんとやるなら…エンジン改造が必要…

という、記事タイトルの通りです。つらい。 以下は結論を聞いた上で詳細を知りたいという物好きな方向けです。

続きを読む

【UE5, C++】 AnimSequence から AnimComposite, Montage を少し便利に作る方法

はじめに

AnimSequenceアセットの右クリックメニューから AnimComposite, Montageアセットを作れます。しかし、アセット生成先のフォルダを指定できなかったり、アセット名末尾に _Composite/Montage が強制的につけられます。

それぞれ手動でアセットを移動・リネームすればいい話ではありますが…それが数十、数百回となると流石にストレスですし、ヒューマンエラーも時々発生してしまいそうです。

ということで、この処理をC++で自作して、プロジェクトのルールに沿った場所・命名規則AnimComposite, Montageアセットを作成できるようにします。

続きを読む

【UE5】StateTreeで文字列から関数・イベントを呼び出すタスクの作り方

はじめに

StateTreeから制御対象のActorの関数・イベントを呼びたい、というのは多々あるかと思いますが、そのたびに専用のStateTree Taskを作るのは少々めんどうです。

基底クラスで関数を用意したり、(BP)Interfaceなどを用いることで1つのTaskを流用することはできますが、プロト制作時などスピード感が必要な段階では…その準備もサボりたい所…

ということで、文字列から関数・イベントを呼び出せる CallFunctionByNameWithArguments を使ったStateTree Taskを作ってみました!

事前準備不要でStateTreeからActor(UObject)が持つ処理を呼び出せますし、

呼び出す関数名・引数をStateTreeのParameterと紐づけておけば、Actor側のStateTree Component で設定することが可能になります。

その結果、実装が多少違うBP・Actorであっても、StateTreeを超汎用的に使用することが可能になります!これは便利!(なはず)

ということで、今回はそんなStateTree Taskを実現する C++コードを紹介します。なお、もしBPのみで実現したい場合はKEコマンドを使用することになるはずです。

【UE4】ConsoleCommand「CE,KE」について【★★☆】 | キンアジのブログ

続きを読む

【UE5】StateTreeのParameterを実行中に変更する方法(C++版)

はじめに

StateTreeのParameterStateTreeComponentで初期値を設定することができ、

TaskやConditionなどで紐づけ(Binding)して利用することが可能です。

また、StateTree全体だけでなく、State毎にParameterを追加・設定することが可能です。

しかし、UE5.5時点では、「実行中にParameterの値変更すること」は C++側でしかできません。

今後のアップデートでBPからも変更可能になる可能性は高いとは思いますが、ひとまず本記事では C++ を使って Parameterを変更する方法について紹介します!

続きを読む