😺

Visualdataprepを使ってActorComponentやSceneComponentをDatasmith Actorに付与する

2024/12/17に公開

この記事はUnreal Engine (UE) Advent Calendar 2024シリーズ 2の17日目参加記事です。
https://qiita.com/advent-calendar/2024/ue

概要

ノンゲーム分野でのUnrealEngineへのデータインポート形式として知られているdatasmith。
このDatasmithデータのインポート時にカスタム処理をかけられるVisual Dataprepという機能をご存知でしょうか。

本記事ではVisual Dataprepを用いてActor componentやScene Componentをインポート処理で自動付与する方法をご紹介します。

Visual Dataprepの詳しい内容に関しては下記資料類をご参照ください。

https://dev.epicgames.com/documentation/ja-jp/unreal-engine/dataprep-import-customization-in-unreal-engine

https://dev.epicgames.com/community/learning/courses/Nz7/unreal-engine-datasmith-visual-dataprep/DXzx/unreal-engine-visual-dataprep?locale=it-it&locale=en-us

https://www.docswell.com/s/EpicGamesJapan/Z6G1E5-UE4_UFE21S_M&F_Dataprep

環境準備

VisualDataprepが使用できるバージョンのUnreal Engine
下記プラグインの有効化

  • 取り込む形式に対応したDatasmith Importer(筆者の場合、CINEMA4Dファイルを取り込むためDatasmith C4D Importer)
  • Datasmith Content
  • Dataprep Editor(※Dataprep Geometry Optionsは今回の処理には有効化不要)

Custom Dataprep Operation Blockの作成

All Classesから、Dataprep Operationを親クラスに選択してBPを作成します。

作成したBPを展開したら、DataprepEditorで探しやすいようにFunctionのOverrideから"GetDisplayOperationName"を選択し、表示名を入力しておきましょう。

EventGraphにもどり、下記のようにノードを構成します。
例ではActorComponentをインポート時に付与するので、変数はActorComponentのClassReferenceにします。変数は公開にしておきます。

DataprepEditorで作成したCustom Dataprep Operation BlockをVisual Dataprepで使用する

DataprepのBlock一覧に作成した”Custom Dataprep Operation Block"が出現していますので、レシピグラフに配置して使用します。
今回はbearというLabelのActorにのみ"ActorComponent"を付与するのでFilter Blockで対象を絞ります。
先ほど”Custom Dataprep Operation Block"のActor component変数を公開にしたので、UE内のActor componentを参照できます、今回は事前に作成しておいたMouseHover時にイベントを着火するActor Component"AC_HoverEvent"を付与してみます。

Dataprepのレシピグラフ処理を実行してレベルに配置します。(Execute→Commit)
指定したActorにActor Componentが付与されていることが確認できます。
※Execute実行後の時点でdataprepEditorでActor Componetが付与されていることがわかります。

結果

付与した"AC_HoverEvent"はランタイム中に付与されているActorにマウスカーソルがHoverするとマウスアイコンが変わる処理を仕込んでいます、動画の通りインポート時にActor Componentを付与する事ができました。

動画
https://capture.dropbox.com/P2CwznaYb8dN0Et2

同様にScene Componentも"Custom Dataprep Operation Block"の"Add New Subobject"にClass変数を入れればインポート時に付与できます。

お読み頂きありがとうございました!

Discussion