WBPにて、配置先のWBPを開いた状態で、配置元の Instanced プロパティを変更するとクラッシュする

お世話になっております。

WBP にて UPROPERTY(Instanced) としたプロパティを Details から編集する際に以下の check() によってエラーが発生する場合があります。

[ UObjectHash.cpp L:1672 ]

UObjectBase* FindObjectWithOuter(const class UObjectBase* Outer, const class UClass* ClassToLookFor, FName NameToLookFor)
{
    UObject* Result = nullptr;
    check( Outer ); // ← ここがエラーとなってクラッシュ
    // We don't want to return any objects that are currently being background loaded unless we're using the object iterator during async loading.
    EInternalObjectFlags ExclusionInternalFlags = DefaultInternalExclusionFlags | UE::GetAsyncLoadingInternalFlagsExclusion();
    // 後略
}

調査したところ、以下の条件で、FObjectPropertyBase::ImportText_Internal() にて、Parent が nullptr のまま実行されているようでした。

  1. InstancedプロパティをもったWBP(以下 WBP_Instance)と、それが配置されているWBP(WBP_Parent)を用意する
  2. WBP_Parent をエディタ上で開いてから、WBP_Instance の Instancedプロパティを変更するとエラーとなる
  3. WBP_Parent を1度でも開くと、閉じてから編集してもエラーとなる

こちらのエラーは、UE5.7.1 での発生を確認しています。

また、UE5.5.4 では発生しないことを確認しています。

つきましては、こちらのエラーを回避する設定などはございますでしょうか。

また、上記が存在しない場合、エンジン改造を含むこのエラーを修正する方法はございますでしょうか。

以上となります。

ご確認のほどよろしくお願いいたします。

再現手順
状況を再現可能なサンプルプロジェクトを添付します。​

サンプルプロジェクトでの再現手順は以下の通りです。

  1. wbp_parent を開く
  2. wbp_instance が Hierarchy 上で配置されいていることを確認する
  3. wbp_instance を開く
  4. Details から Instance Object を変更する
  5. エディタがクラッシュして終了することを確認する

お世話になっております。

申し訳ないですが、送付いただいたファイルの中に再現用プロジェクトが見つからず、こちらのエディタで直接クラッシュを再現することはできませんでした。

ログとエンジン側のコードを確認したところ、問題はOuterがnullのままFindObjectWithOuter()に渡され、UObjectHash.cppのcheckで落ちている点にあります。ImportText_Internal()は複数ありますが、今回修正すべきなのはFObjectPropertyBaseの実装です。

簡易的な修正としては、nullのOuterをそのまま渡さないようにするだけで十分です。

UObject* OuterToUse = Outer;

if (!OuterToUse)

{

OuterToUse = GetTransientPackage();

}

Result = FindObjectWithOuter(OuterToUse, ClassToLookFor, NameToLookFor);

これでクラッシュは回避できるはずです。

もしそれでも問題が残っていたら、再現プロジェクトをいただければ、実際にこのコードパスを通っているかどうか確認できます。

お手数ですが、よろしくお願いします。

お世話になっております。

ご回答ありがとうございます。

再現用プロジェクトが添付できておらず、お手数をおかけして申し訳ございませんでした。

ご提案いただきました内容の修正を試したところ、クラッシュを回避できることを確認いたしました。

修正方法のご連絡、誠にありがとうございました。

この度は迅速なご対応ありがとうございます。

引き続きどうぞよろしくお願いいたします。

お世話になっております。

回避できてよかったです!

問題があればいつでも聞いてください!

引き続きよろしくお願いします。