LoginSignup
3
1

More than 1 year has passed since last update.

レベルシーケンサにFBXカメラをEditorScriptingでインポートする

Posted at

この記事はUnreal Engine 4 (UE4) その2 Advent Calendar 2021の3日目の記事です。

今回は、EditorScriptingについての記事になります。
UnrealEngineのEditorScriptingは、古いバージョンと比べてできる事がかなり増えています。
この記事では、レベルシーケンサへEditorScriptingを使って、カメラをインポートする内容を実際にブループリントのノードも含めて紹介します。

検証環境

  • Unrealengine 4.27

サンプルノード

単純にカメラをインポートするなら、以下のブループリントで実現する事は可能です。

スクリーンショット 2021-11-19 225246.png

レベルシーケンサにFBXカメラをEditorScriptingでインポートする

ノードの説明

GetCurrentLevelSequence / RefreshCurrentLevelSequence

GetCurrentLevelSequenceとRefreshCurrentLevelSequenceは、セットで考えた方がいいかもしれません。
GetCurrentLevelSequenceは、現在開いている、レベルシーケンサのインスタンスを取得できます。レベルシーケンサが開かれていない場合は、Nullなので、IsValidで、確認する事をおすすめします。
RefreshCurrentLevelSequenceは、レベルシーケンスエディタを更新します。RefreshCurrentLevelSequenceが実行されない場合は、レベルシーケンスエディタは更新されません。
しかし、レベルシーケンサは編集されている為、Dirtyマークは付きますが、レベルシーケンサは、再度開き直さないと内容が更新されません。

GetCurrentLevelSequenceAndRefreshCurrentLevelSequence.png

GetEditorWorld

Worldオブジェクトを取得できます。GetEditorWorldは、非ランタイム用で、ランタイム用には、GetGameWorldというノードがあります。
後にImageLevelSequencerFBXでは、Worldオブジェクトを引数に取る為、使用しています。
Worldオブジェクトについては、こちらの記事が分かりやすく説明されていると思います。

GetEditorWorld.png

GetBindings

レベルシーケンサに登録されているオブジェクトを取り出す事が出来ます。
アクターをスポーンしても、レベルシーケンサに登録はされません。
レベルシーケンサに、バインドして登録する必要があります。
GetBindingsは、バインドされているオブジェクトを取得する事が出来ます。
バインドされているオブジェクトの取得には、他にも「FindBinfimgById」や「FindBinfimgByName」など、単一オブジェクトを探すノードも実装されています。

GetBindings.png

ムービーシーンのユーザーインポートFBX設定を構成

FBXカメラのインポート設定をこのオブジェクトで設定できます。
実際には、UMovieSceneUserImportFBXSettingsクラスを作成しています。
UMovieSceneUserImportFBXSettingsは、プロパティがブループリントで公開されていない為、サンプルでもしているようにSetEditorPropertyから行います。
設定パラメータについての詳細は、後ほど説明します。

ムービーシーンのユーザインポートFBX設定を構成.png

ImageLevelSequencerFBX

ImageLevelSequencerFBXは、実際に、FBXのカメラをインポートします。
引数の内、上の三つは、ノードから必要なオブジェクトを取得します。
InInportFBXSettingsは、後に説明する、UMovieSceneUserImportFBXSettings(カメラインポート設定)を渡します。
UMovieSceneUserImportFBXSettingsを引数に取る為、ImageLevelSequencerFBXは、カメラのインポートにしか使用する事はないと思われます。
InInportFilenameは、インポートするFBXのパスを渡します。このパスは、エクスプローラー上のパスとなります。

ImageLevelSequencerFBX.png

ムービーシーンのユーザーインポートFBX設定(UMovieSceneUserImportFBXSettings)のパラメータ表

ムービーシーンにカメラをインポートする際のFBX設定の内容となります。
カメラをインポートすると表示される下のダイアログの設定方法です。
このダイアログは、4.27以降にアップデートされており、「フロントXAxisを強制」「シーンユニットを変換」「トランスフォームトラックを変換」の三つの引数が増えました。

Fbxをインポートウインドウ.png

プロパティ名 日本語訳 変数型 説明
bMatchByNameOnly 名前のみで一致 bool インポートするカメラと名前が同一のカメラに対して、インポートを行うかのフラグです。bCreateCamerasにチェックが入っている場合は、新規作成したカメラにインポートされます。
bForceFrontXAxis フロントXAxisを強制 bool 4.27から追加。こちらは、インポートする際に前面の軸を変えてしまうので、思わぬトラブルになる可能性がありますので、特に理由が無ければチェックを外しておく事をおすすめします。
bConvertSceneUnit シーンユニットを変換 bool 4.27から追加され、そのシーンに合わせた変換が行われます。例えば、Maxから出力したFbxの場合は、2.54倍の変換がされます。
ImportUniformScale 均一なインポートスケール float こちらもFbxのスケールの変換に使用されます。特に必要が無ければ、1にしておくのがいいかと思います。
bCreateCameras カメラの作成 bool インポート時に、CineCameraActorを作成するかどうかのフラグです。同時にショットトラックも作成されます。
bReplaceTransformTrack トランスフォームトラックを置換 bool 4.27から追加。チェックが入っていない場合は、トランスフォームトラックが新規に作成されます。
bReduceKeys キーを削除 bool CineCaemraActorに、既にキーが入っていた場合に、削除を行うかのフラグです。
ReduceKeysTolerance キーを削除の許容差 float bReduceKeysの誤差をどこまでキーを削除する場合に、どの範囲まで誤差を許容するかです。

UMovieSceneUserImportFBXSettingsを直接作成できるようになった

UMovieSceneUserImportFBXSettingsは、4.26以前では、UCLASSにBlueprintTypeが入っていなかった為、ブループリントから直接インスタンスを作成する事が出来ませんでした。
4.27では、ここが改善されており、ブループリントからのインスタンス化ができるようになりました。

4.26
UMovieSceneUserImportFBXSettings_426.png

4.27
UMovieSceneUserImportFBXSettings_427.png

その為、「クラスからオブジェクトを構成」から、直接UMovieSceneUserImportFBXSettingsを作成する事ができるようになっています。
クラスからオブジェクトを構成.png

ImageLevelSequencerFBXのbCreateCamerasについて注意

bCreateCamerasによって作られるCineCameraActorには、注意点があります。
それは、レベルにもスポーンされてしまうCineCameraActorが作成される事です。レベルにインスタンスが作成される為、レベルとレベルシーケンサの二つが正しくなければ、使用できないカメラとなってしまいます。
これを避ける為には、予めレベルシーケンサ作成されているCineCameraActorに対して、インポートを行う事で、回避できます。

明日は、Toshiyuki Wadaさんになります。
よろしくお願いいたします。

参考URL

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1