この記事はUnreal Engine 4 (UE4) その2 Advent Calendar 2021の3日目の記事です。
今回は、EditorScriptingについての記事になります。
UnrealEngineのEditorScriptingは、古いバージョンと比べてできる事がかなり増えています。
この記事では、レベルシーケンサへEditorScriptingを使って、カメラをインポートする内容を実際にブループリントのノードも含めて紹介します。
検証環境
- Unrealengine 4.27
サンプルノード
単純にカメラをインポートするなら、以下のブループリントで実現する事は可能です。
レベルシーケンサにFBXカメラをEditorScriptingでインポートする
ノードの説明
GetCurrentLevelSequence / RefreshCurrentLevelSequence
GetCurrentLevelSequenceとRefreshCurrentLevelSequenceは、セットで考えた方がいいかもしれません。
GetCurrentLevelSequenceは、現在開いている、レベルシーケンサのインスタンスを取得できます。レベルシーケンサが開かれていない場合は、Nullなので、IsValidで、確認する事をおすすめします。
RefreshCurrentLevelSequenceは、レベルシーケンスエディタを更新します。RefreshCurrentLevelSequenceが実行されない場合は、レベルシーケンスエディタは更新されません。
しかし、レベルシーケンサは編集されている為、Dirtyマークは付きますが、レベルシーケンサは、再度開き直さないと内容が更新されません。
GetEditorWorld
Worldオブジェクトを取得できます。GetEditorWorldは、非ランタイム用で、ランタイム用には、GetGameWorldというノードがあります。
後にImageLevelSequencerFBXでは、Worldオブジェクトを引数に取る為、使用しています。
Worldオブジェクトについては、こちらの記事が分かりやすく説明されていると思います。
GetBindings
レベルシーケンサに登録されているオブジェクトを取り出す事が出来ます。
アクターをスポーンしても、レベルシーケンサに登録はされません。
レベルシーケンサに、バインドして登録する必要があります。
GetBindingsは、バインドされているオブジェクトを取得する事が出来ます。
バインドされているオブジェクトの取得には、他にも「FindBinfimgById」や「FindBinfimgByName」など、単一オブジェクトを探すノードも実装されています。
ムービーシーンのユーザーインポートFBX設定を構成
FBXカメラのインポート設定をこのオブジェクトで設定できます。
実際には、UMovieSceneUserImportFBXSettingsクラスを作成しています。
UMovieSceneUserImportFBXSettingsは、プロパティがブループリントで公開されていない為、サンプルでもしているようにSetEditorPropertyから行います。
設定パラメータについての詳細は、後ほど説明します。
ImageLevelSequencerFBX
ImageLevelSequencerFBXは、実際に、FBXのカメラをインポートします。
引数の内、上の三つは、ノードから必要なオブジェクトを取得します。
InInportFBXSettingsは、後に説明する、UMovieSceneUserImportFBXSettings(カメラインポート設定)を渡します。
UMovieSceneUserImportFBXSettingsを引数に取る為、ImageLevelSequencerFBXは、カメラのインポートにしか使用する事はないと思われます。
InInportFilenameは、インポートするFBXのパスを渡します。このパスは、エクスプローラー上のパスとなります。
ムービーシーンのユーザーインポートFBX設定(UMovieSceneUserImportFBXSettings)のパラメータ表
ムービーシーンにカメラをインポートする際のFBX設定の内容となります。
カメラをインポートすると表示される下のダイアログの設定方法です。
このダイアログは、4.27以降にアップデートされており、「フロントXAxisを強制」「シーンユニットを変換」「トランスフォームトラックを変換」の三つの引数が増えました。
プロパティ名 | 日本語訳 | 変数型 | 説明 |
---|---|---|---|
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では、ここが改善されており、ブループリントからのインスタンス化ができるようになりました。
その為、「クラスからオブジェクトを構成」から、直接UMovieSceneUserImportFBXSettingsを作成する事ができるようになっています。
ImageLevelSequencerFBXのbCreateCamerasについて注意
bCreateCamerasによって作られるCineCameraActorには、注意点があります。
それは、レベルにもスポーンされてしまうCineCameraActorが作成される事です。レベルにインスタンスが作成される為、レベルとレベルシーケンサの二つが正しくなければ、使用できないカメラとなってしまいます。
これを避ける為には、予めレベルシーケンサ作成されているCineCameraActorに対して、インポートを行う事で、回避できます。
明日は、Toshiyuki Wadaさんになります。
よろしくお願いいたします。