Inconsistent multiplayer Actor "Net Load On Client" behaviour

Hello, I’m seeing inconsistent bNetLoadOnClient (Net Load On Client) behaviour using both blueprint and C++ in UE4.8. In certain situations, actor still loads on clients, ignoring “Net Load On Client” set to false.

Repro steps:

1.Create an empty level.

2.Create a new blueprint class based on Actor, eg. “TestActor”.

3.In Class Defaults for “TestActor”, uncheck “Replication > Net Load on Client”.

4.Add a visible component to actor (eg. Static Mesh or Text Render) so it’s easily visible in-game.

5.Drag an instance of TestActor into world where you can easily see it.

6.Under “Play > Advanced Settings”, set “Multiplayer Options > Number of Players” to 2, and ensure “Use Single Process” is checked.

7.Run “Play > Selected Viewport”. Observe test actor is only visible on listen server, as expected.

8.Under “Play > Advanced Settings”, uncheck “Multiplayer Options > Use Single Process” and ensure Editor Multipalyer Mode is “Play As Listen Server”.

9.Run “Play > Selected Viewport”. Observe test actor is visible on both client and server, ignoring its “Net Load on Client” flag.

I can provide a video on request. Thanks for your help!

Hi ,

Thanks for report! I was able to reproduce this in 4.8.3 as well as our internal builds, and I’ve entered a bug report for issue (UE-19530). It’s unlikely this will be fixed quickly, however, as disabling Use Single Process isn’t recommended, and this does not occur in packaged games. best way to test is to create a shortcut to editor with location of project and commandline parameters -game. You can also specify one as listen server and directly connect a second as a client if you don’t have your connections set up in game yet.

I will mention, however, that there’s another bug with Net Load on Client being disabled, in that collision appears to be loaded on Clients regardless. I’ve got another bug report in for that as well (UE-19529).

I will let you know when I see any update on these. Thanks again!

Thanks , that’s a big relief as I thought I was going crazy testing this, haha! For what it’s worth, I debugged problem a little bit. It seems that on clients, inside ULevel::InitializeNetworkActors() call to Actor->Destroy() is failing. It calls World->DestroyActor(), which early-exits on following statement:

// Can't kill if wrong role.
if( ThisActor->Role!=ROLE_Authority && !bNetForce && !ThisActor->bNetTemporary )
{
	return false;
}

debugger shows ThisActor->Role == ROLE_None, ThisActor->RemoteRole == ROLE_Authority, and ThisActor->bExchangedRoles = true. It seems that either original call to Actor->Destroy() should set parameter bNetForce = true, or actor shouldn’t be exchanging roles before ULevel::InitializeNetworkActors() is called, or statement inside World->DestroyActor() is wrong. Happy bug hunting! :slight_smile:

Thanks! I’ll add that to report.

More than 2 years have gone by and this is still not fixed :confused:

issue with disabling single process appears to have been fixed (https://issues.unrealengine.com/issue/UE-19530). Unfortunately I can’t find issue UE-19529 in public tracker, but it appears to have been fixed, based on what I can see in UE4.20.