執筆バージョン: Unreal Engine 4.27
|
みなさん、こんにちは。
ブループリントアセットをダブルクリックした際、通常のブループリントエディタが開かず、このようなウィンドウが開く事があるかと思います。


ノードやコンポーネントを追加せず、基底クラスの変数のパラメーターのみを弄る際には非常に便利なのですが、困ったことにそれらのケースより、ノードやコンポーネント、変数などを追加したい場合がほとんどで、このウィンドウが最初に開いて、その直後に「Open Full Blueprint Editor」をクリックするというひと手間をかけさせられる場面がほとんどかと思います。
そして出来る事なら、この機能はエディタの設定などで無効にしたいと思われる方は多いかと思います。
しかし、この機能を無効にする方法はUE4.27.2時点では残念ながら存在しません。
そこで今回は、エンジンをほんの少しだけ弄る事でこの機能を無効にする方法を紹介したいと思います。また、せっかくなのでどのように遡って、エンジンの改造箇所を特定したかも記述していきたいと思います。
結論だけ知りたい方は以下の経緯は読み飛ばしてもらって全く問題ありません。
〇改造箇所の調査
まずは、そもそもこのデータ専用ブループリントエディタの画面はどうやって開かれているのでしょうか。まず手始めに「Open Full Blueprint Editor」の文言がどこに書かれているかエンジンのソールファイルを検索します。

すると1件のみ検索に引っ掛かりました。
【\Engine\Source\Editor\Kismet\Private\BlueprintEditorTabFactories.cpp】

まさしく探していたウィンドウの表示部分の処理です。
そして該当箇所のすぐ近くに「FBlueprintEditorUtils::IsDataOnlyBlueprint(Blueprint)」というメソッドがありました。どうやらこの関数によって該当のブループリントがデータ専用かどうかを判断しているようです。しかしこの部分の処理はあくまでデータ専用ブループリントエディタの画面が開かれた後の処理であり、実際にこの画面を開くかどうかを判別しているわけではありません。
そこでIsDataOnlyBlueprint関数が他の場所でも使用されていなかソースファイルを検索して見る事にします。
すると使用されている箇所がいくつか見つかりました。

検索結果の一覧を一つずつ確認していくと、「AssetTypeActions_Blueprint.cpp」ファイルで使わている事がわかります。どうやらクラス名から、ブループリントアセットの挙動に関するクラスのようです。実際にファイル名を開いてもう少し調査してみる事にします。
【\Engine\Source\Developer\AssetTools\Private\AssetTypeActions\AssetTypeActions_Blueprint.cpp】

使用されていた関数は
|
bool FAssetTypeActions_Blueprint::ShouldUseDataOnlyEditor( const UBlueprint* Blueprint ) const |
です。関数名と処理の中身から、引数のブループリントがデータ専用のエディタを使うかどうかをboolで返す内容のようです。まさしく今回探してる処理のための判定用の関数だという事がわかりました。
実際にこの判定処理を使ってエディタを開いているかどうか確認するため、この「ShouldUseDataOnlyEditor関数」がどこで呼ばれているのか検索してみます。

|
void FAssetTypeActions_Blueprint::OpenAssetEditor( const TArray<UObject*>& InObjects, TSharedPtr<IToolkitHost> EditWithinLevelEditor ) |
という関数内の、CreateBlueprintEditor関数の引数で使わている事がわかります。
という事はほぼ確実にここの処理で、ブループリントアセットを開く際にデータ専用エディタにするかどうかを判断しているようです。後はこの推測を確実なものにするため、試しに該当メソッドにブレークポイントを配置して、VisualStudio上からエディタを起動し、ブループリントアセットをダブルクリックしてみます。
結果、このブレークポイントで処理が中断しました。
それでは続いて、この「ShouldUseDataOnlyEditor(Blueprint)」関数が好きにFalseを返す方法を考えてみます。該当関数の処理の中身を改めると見ると…

!Blueprint->bForceFullEditor
という処理が目に留まりました。
bForceFullEditor?
bForceFullEditor!
bForceFullEditor!!!
いるじゃないか!お前だよ!お前!!!!
早速、UBlueprintクラス宣言を見てます。
【\Engine\Source\Runtime\Engine\Classes\Engine\Blueprint.h】

すると変数名にまさしくな内容のコメントが記載されてありました。しかし、UPROPERTYのタグは「transient」が指定されており、クラスがロードされた際は0で初期化されます。
UPROPERTYのtransientについてはこちら
https://docs.unrealengine.com/4.27/ja/ProgrammingAndScripting/GameplayArchitecture/Properties/Specifiers/
あとはこの「bForceFullEditor」の初期値を自由に操作できれば、データ専用ブループリントエディタの表示を自由に制御できるというわけです。
〇対応
そこで、UBlueprint::bForceFullEditorのUPROPERTYのタグを「transient」から「Config」に変更します。
|
/** Whether to force opening the full (non data-only) editor for this blueprint. */ UPROPERTY(config) uint8 bForceFullEditor : 1; |
エンジンのビルド完了後に
- \Engine\Config\BaseEngine.ini
- [プロジェクトフォルダ]\Config\DefaultEngine.ini
などのいずれかのEngine.iniファイルに
|
[/Script/Engine.Blueprint] bForceFullEditor=true |
を記載すれば完了です。対応自体はすごく簡単ですね!エンジン改造(エンジンビルド)が必要というハードルの高さはありますが、もしデータ専用ブループリントエディタに用が無い場合は是非対応してみてください。