|
執筆バージョン: Unreal Engine 5.6
|
こんにちは!みなさんはこんな場面に立ち会ったことはありますか?
「なんか変だと思ったら、エンジンのアセットをいじっちゃってた~!」
私はあります。
同じバージョンのエンジンを別プロジェクトでも使っていたりすると、エンジンアセットそのものを変更してしまうことで、別プロジェクトの方に影響が出る可能性もありますね。これは避けたい。気づきたい。
というわけで、Editor Utility でできる仕組みを用意してみましょう。
まずは Editor Utility Blueprint クラスを作成します。
図のように ContentDrawer で Editor Validator Base を継承するBPクラスを作成していきましょう。名前は「EUB_AssetLocationValidator」としておきます:


作成したクラスを開いたら Can Validate Asset 関数をオーバーライドします。今回はすべてのアセットを対象にするので、Return Node の戻り値(bool)にチェックを入れておきましょう:


次に、Validate Loaded Asset 関数をオーバーライドし、変更を保存しようとしているアセットのパスをチェックする処理を実装します。
アセットのパスが「Content」を表す「/Game/」で始まっているかをチェックして、対象のアセットが「Content 以下にあるか」を判別します:


もしアセットが Content 以下にあれば、「Asset Passes」ノードを実行して、Return Node で戻り値を「Valid」にします。
アセットが Content 以下にない場合は、「Asset Fails」ノードを実行して、Return Node で戻り値を「Invalid」にします。

さて、それでは挙動を確認しましょう。
Editor Validator Base によるアセットの検証処理ですが、エディタ起動時に自動で登録されます。
今は作ったばかりで登録されていないので、一度エディタを閉じて、再度エディタを開くことで登録されるようにしましょう。
再起動したら、Engine 以下にあるコンテンツ、例えば Cube を開いて、「保存」してみましょう:

すると、画面右下に、図のようなエラーメッセージが表示されます:

また、MessageLog にも当該アセットへのリンクつきでエラーメッセージが表示されます。

これで、Content 外にあるファイルを保存した場合に気づけるようになりました!
なお、エラー扱いの場合でも、アセットの保存そのものは行われているのでご注意ください!