ActorがDestroyされるときに、アタッチされているNiagaraComponentの完了を待ってから消したい

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

表題の通り、ActorがDestroyされるときにアタッチされているNiagaraComponentは完了を待ってから消したいと思っています。

NiagaraComponentをDeactivate()したあとにSpawnSystemFinishedのイベントかIsCompleted()がtrueになるのを待ってからActorをDestroyするのが公式の手順かと思いますが、

ActorはNiagaraComponentを待たずに即時Destroyしたいです。

以前別プロジェクトでCascadeを使用していた際は、DetachFromComponentを呼ぶだけで期待する動作が得られましたが、

NiagaraではDetachFromComponentだけではActorのDestroyと同時にエフェクトも消えてしまいます。

こちら挙動を調べたところ、AActor::EndPlayでアタッチされているNiagaraComponentのEndPlayが呼ばれてしまうことが関係あるように見えました。

なので、以下のようにNiagaraComponentを所有しているActorのEndPlay時にRemoveOwnedComponentを呼ぶことでActorは即時Destroyかつ、NiagaraComponentは完了を待ってから消すことができました。

​しかしこの方法では、NiagaraCompのOwnerとなるActorがDestroyされたあともNiagaraComponentが動作してしまうことになり安全なのか?が気になっています。

NiagaraComp->DetachFromComponent(FDetachmentTransformRules::KeepWorldTransform); // AActor::EndPlayでEndPlayが呼ばれてしまうためOwnedComponentから外す RemoveOwnedComponent(NiagaraComp); NiagaraComp->SetAutoDestroy(true); NiagaraComp->Deactivate();

代案として、Renameを呼び出してOuterを変更することも試しましたが、以下の個所でEnsureを引いてしまいます。

FPrimitiveSceneInfoAdapter(UPrimitiveComponent* InComponent) { ... check(InComponent->SceneData.OwnerLastRenderTimePtr == FActorLastRenderTime::GetPtr(InComponent->GetOwner()));

こちらRemoveOwnedComponentを使用する方法に問題がないか?また他に良い解決法があればご教授いただければ幸いです。

よろしくお願いいたします。

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

RemoveOwnedComponent についてはコメントにありますように、基本的には直接呼び出して使用することを想定されてはいないようです。

問題なく動作する可能性はありますが、ご注意の上で運用して下さい。

`/**

  • Removes a component from the OwnedComponents array of the Actor.
  • In general this should not need to be called directly by anything other than UActorComponent functions
    /
    ENGINE_API void RemoveOwnedComponent(UActorComponent
    Component);`他の手段としては NiagaraComponent を持つ別のアクター(NiagaraActor など)をアタッチして用いる方法が考えられます。

よろしくお願いいたします。