MultiUser使用時のLevelの同期ポリシーについてお伺いできればと思います。
MultiUserを使用する際に、Level上に生成するActorの状態は一致させるべきでしょうか?
①例えば、PC1とPC2でMultiUserセッションに参加した際、
C++のコード上からPC1側でAVPEditorTickableActorBaseを継承して生成したクラスなどはPC2側にも同期する必要がありますか?
②また、PC1とPC2に存在するActorに対して、C++のコード上でPC1側でComponentを付与した際に、PC2側にもそのComponentを同期する必要がありますか?
PC1側とPC2側でLevelのActorの状態が異なる状態で、存在しないActorに対してTransactionを送ってしまいClashすることがあったので、現状はLevel上の状態を一致させるように使用していました。
MultiUser環境にてACompositingElementを生成する際に、Composureの処理が重いため可能であればPC1側にのみ生成したいと考えておりますが、これは問題ないでしょうか?
[Attachment Removed]
お世話になっております。
>①例えば、PC1とPC2でMultiUserセッションに参加した際、
C++のコード上からPC1側でAVPEditorTickableActorBaseを継承して生成したクラスなどはPC2側にも同期する必要がありますか?
こちらに関しては同期を推奨します。
PC2に存在しないActorのトランザクションの送信(propertyの変更等)が起きるとクラッシュの原因となる場合があります。
>②また、PC1とPC2に存在するActorに対して、C++のコード上でPC1側でComponentを付与した際に、PC2側にもそのComponentを同期する必要がありますか?
こちらも上記同様の理由で同期推奨になります。
>MultiUser環境にてACompositingElementを生成する際に、Composureの処理が重いため可能であればPC1側にのみ生成したいと考えておりますが、これは問題ないでしょうか?
こちらは基本的に問題無いですが、別ユーザーがACompositingElementを生成してしまった場合に例外が発生します。
一例ですが、
AActor* UWorld::SpawnActor( UClass* Class, FTransform const* UserTransformPtr, const FActorSpawnParameters& SpawnParameters )
の
case FActorSpawnParameters::ESpawnActorNameMode::Required_Fatal:
でアサーションされる場合があります。
こちらはLevel、worldに同名のActor(UObject)が存在した場合に引っかかります。
また上記にも記載しましたがPC2に存在しないActorのトランザクションの送信(propertyの変更等)が起きるとクラッシュの原因となる場合がありますので注意して頂ければと存じます。
[Attachment Removed]