Instance protocol for components and actors with RPCs are not marked as having full push based dirtiness

Hello,

FReplicationProtocolManager::CreateInstanceProtocol loops the fragments and builds out shared traits amongst all the fragments which are then used later to determine if the object has fully push based dirtiness. The “function” (rpc) fragment doesn’t have push based dirtiness and so the result is that any object with RPC will NOT be marked as fully push based even if all replicated properties on the object are indeed fully push based. My first thought was to modify the logic here to ignore push based dirtiness when considering the “function” (rpc) fragment but I don’t yet know what other ramifications that might have. Any thoughts here?

Thanks,

Nick

Edit:

A potential solution I’m experimenting with is modifying FPropertyReplicationStateDescriptorBuilder::BuildMemberCache so that instead of setting SharedPropertyTraits to None in the case that there aren’t any members, I set it to HasPushBasedDirtiness since it would seem fair to assume that no members is fully push based and thus allows the Functions fragment to have the trait necessary to resolve this issue.

Edit 2:

Another potential solution would be to modify FPropertyReplicationFragment::CreateAndRegisterFragment so that the fragment is given the push based dirtiness trait in the case that the descriptor has a member count of 0.

Hi,

I believe this issue was reported previously, and it should be fixed in 5.6: Unreal Engine Issues and Bug Tracker (UE\-189643)

Thanks,

Alex