Houdini APIを使用してHoudiniAssetActorの作成から削除の流れを検証しているのですが、
表題にあるUHoudiniPublicAPIAssetWrapperのDeleteInstantiatedAssetを実行することで
クラッシュに繋がる動作を確認したので報告をさせていただければと思います。
検証時の環境について説明します。
・Unreal Engine:5.0.2
・Houdini:19.0.589
今回Editor Utility Widget(以降EUW)からHoudiniAssetActorの作成と削除を操作しておりました。
添付図はEUWのBPノード構成となります。作成と削除用にそれぞれボタンを作りBP処理を紐づけています。
Instantiate AssetのIn Houdini Assetには任意のHoudiniAssetを設定しておきます。
このEUWを使って作成→削除を順に実行した後、
CGを実行(Cmdから"obj gc"を入力)する等を行うとTypedElementData.hのFatal条件に引っかかってしまいました。
下記は該当のエンジンコード、及びクラッシュ時のログとなります。
※該当コード
void CheckNoExternalReferencesOnDestruction() const { #if DO_CHECK const FTypedElementRefCount LocalRefCount = GetRefCount(); if (LocalRefCount > 1) { LogReferences(); UE_LOG(LogCore, Fatal, TEXT("Element '%s' is still externally referenced when being destroyed! Ref-count: %d; see above for reference information (if available)."), *GetDebugId(), LocalRefCount); } #endif // DO_CHECK }
※ログ
Fatal error: 【File:(※Unreal Engineへのパス)\Engine\Source\Runtime\TypedElementFramework\Public\Elements\Framework\TypedElementData.h】 【Line: 276】
Element 'HoudiniAssetActor /Temp/Untitled_1.Untitled_1:PersistentLevel.None - ID: 78' is still externally referenced when being destroyed! Ref-count: 3; see above for reference information (if available).
一方で、削除を行う前にアウトライナのフォーカスをHoudiniAssetActorから他の項目へと切り替えておき、
その後に削除を行った場合はGC等を実行してもクラッシュは発生しませんでした。
また、HoudiniAssetActorをアウトライナからDeleteキーで直接削除した場合も
CG実行後のクラッシュは発生していないことも確認しています。
クラッシュが発生する場合としない場合の違いとして、発生時は下記のようなWarningが出力されています。
LogActorComponent: UnregisterComponent: (/Temp/Untitled_1.Untitled_1:PersistentLevel.HoudiniAssetActor_UAID_0492265A3885151601_1134072087.StaticMeshComponent_0) Not registered. Aborting.
LogHoudiniEngineEditor: Warning: Invalid TWeakObjectPtr in Details: (※Unreal Engineのパス)\Plugins\HoudiniEngine\Source\HoudiniEngineEditor\Private\HoudiniEngineDetails.cpp:1942
LogHoudiniEngineEditor: Warning: Invalid TWeakObjectPtr in Details: (※Unreal Engineのパス)\Plugins\HoudiniEngine\Source\HoudiniEngineEditor\Private\HoudiniEngineDetails.cpp:229
LogHoudiniEngineEditor: Warning: Invalid TWeakObjectPtr in Details: (※Unreal Engineのパス)\Plugins\HoudiniEngine\Source\HoudiniEngineEditor\Private\HoudiniEngineDetails.cpp:1942
LogHoudiniEngineEditor: Warning: Invalid TWeakObjectPtr in Details: (※Unreal Engineのパス)\Plugins\HoudiniEngine\Source\HoudiniEngineEditor\Private\HoudiniEngineDetails.cpp:766
LogHoudiniEngineEditor: Warning: Invalid TWeakObjectPtr in Details: (※Unreal Engineのパス)\Plugins\HoudiniEngine\Source\HoudiniEngineEditor\Private\HoudiniEngineDetails.cpp:829
LogHoudiniEngineEditor: Warning: Invalid TWeakObjectPtr in Details: (※Unreal Engineのパス)\Plugins\HoudiniEngine\Source\HoudiniEngineEditor\Private\HoudiniEngineDetails.cpp:867
LogHoudiniEngineEditor: Warning: Invalid TWeakObjectPtr in Details: (※Unreal Engineのパス)\Plugins\HoudiniEngine\Source\HoudiniEngineEditor\Private\HoudiniEngineDetails.cpp:920
LogHoudiniEngineEditor: Warning: Invalid TWeakObjectPtr in Details: (※Unreal Engineのパス)\Plugins\HoudiniEngine\Source\HoudiniEngineEditor\Private\HoudiniEngineDetails.cpp:960
LogHoudiniEngine: HAPI Asynchronous Destruction Started for . AssetId = 3
以上となります。
もし不具合ではなくDeleteInstantiatedAssetの使い方に誤りがあるようでしたら、正しい手順についてご教示いただければ幸いです。
よろしくお願い致します。