Nativized blueprints cause error in multiplayer

When I use blueprint nativization in UE 4.15 the Linux dedicated server and Win64 client of my game build without problems.

Everything seems to work as intended as long as I stay in singleplayer but once I try to connect to the server the connection drops and I get the following errors in the client log:

LogNetPackageMap:Error: GetObjectFromNetGUID: Failed to resolve path. FullNetGUIDPath: [5]/Game/MyGame/Blueprints/BP_MyGamePlayerController.[3]Default__BP_MyGamePlayerController_C
LogNetPackageMap:Error: UPackageMapClient::SerializeNewActor. Unresolved Archetype GUID. Path: Default__BP_MyGamePlayerController_C, NetGUID: 3.
LogNetPackageMap:Error: UPackageMapClient::SerializeNewActor Unable to  Archetype for NetGUID 2 / 3
LogNet:Warning: UActorChannel::ProcessBunch: SerializeNewActor failed to find/spawn actor. Actor: NULL, Channel: 2

On the server side the log only says:

LogNet: Server connection received: ActorChannelFailure

Connecting works flawlessly when I don’t nativize blueprints for the client build even when the server is built with them enabled.

I tried deleting the Intermediate folder, deleting the cooked content, fully rebuilding the engine and fully rebuilding the game server and client but to no avail.

Hey -

Just to make sure I understand your steps correctly, you’re cross-compiling for Linux using the nativized blueprint setting, correct? You mentioned that not having the client use nativized will work even if the server is; does the same hold true for the inverse (client uses nativized and server does not)?

Hey -

We have not heard back from you in a few days, so we are marking this post as Resolved for tracking purposes. If you are still experiencing the issue you reported, please respond to this message with additional information and we will follow up.

Cheers

Same when using Android App with nativized Blueprint : ActorChannelFailure on Server. Works only if both client and server are Windows.

Hey Footman-

Is it my belief that your Android is the client, is that correct? Is your server setup on Windows or Linux? Can you provide details about how you setup your test to help me reproduce the behavior locally?

I have server running on Windows started with -server shortcut from installed editor.
If I package windows client EXE with nativized blueprints than everything is fine. But if i package Android App with nativized blueprints than this error pops out on server. Without nativization everything is fine.

Hello Footman,

Can you try testing this in a blank project to see if it may be caused by the blueprints in your project or if it’s something that can be reproduced without the need of any special assets?

I also have this issue. Steps to reproduce:

  1. Download the Epic Games network tutorial project (“SteamProject”) https://forums.unrealengine.com/showthread.php?118246-Steam-Blueprint-Multiplayer-Project-Files&p=570490#post570490
  2. Open it with Unreal Engine 4.16.3
  3. Build shaders etc.
  4. Package the project for Windows x64 twice to different locations, one with inclusive blueprint nativization, one without blueprint nativization (e.g. SteamProject and SteamProjectNativized).
  5. Start the nativized version. Host a game (use play method LAN).
  6. Start the non-nativized version (works on same PC). Choose “Find a match”, confirm join
  7. Client will disconnect immediately

Running the nativized version or the non-nativized version twice will result in successful connection.

See instructions below on how to reproduce.

Hello ,

Thank you for following up on this but that behavior is expected. If the two versions are different in any way (such as being nativized and not being nativized) it is expected that the two versions would not be able to connect properly. If two of the same version are able to connect, then there are no issues present at this time.

Hello Matthew, thank you for your reply. I understand that this is by design, but please consider the consequences:

  1. As far as I know, it is not possible to build a dedicated server with blueprint nativization, because the server is only built in Visual Studio, not packaged, so there are no nativization options. So I need to build the dedicated server without nativization.

  2. I cannot combine nativized / non nativized games as far as networking is concerned (I this from your reply).

Now if I combine the points 1 and 2, this means that you cannot use blueprint nativization in any network based game which requires a dedicated server - and this is a real bummer. This basically means that you cannot use blueprint nativization in any but the most trivial network based games.

Citing the original entry of this bug report “When I use blueprint nativization in UE 4.15 the Linux dedicated server and Win64 client of my game build without problems […] but once I try to connect to the server the connection drops […]” the only workaround seems to be not to use nativization.

Is it really by design that nativization is not available for network based games?

I apologize, I missed that this was specifically speaking about Dedicated servers and that raises a good question. There is someone that is more suited to answer this so they’ll be taking a look at this and giving you a response.

Have a nice day!

Hi ,

RE #1, this is possible, however it’s a bit of a manual process in 4.15. Apologies as I don’t believe this was documented. Here’s what you’ll need to do in order to build a nativized dedicated server EXE from within Visual Studio:

  1. Before you build the “server” target in VS, check the contents of your project folder (this should be after the File->Package Project->Win64 step for the client side). You should have an “Intermediate” folder that contains a “Plugins/WindowsNoEditor/NativizedAssets” folder.

  2. Right-click the folder and “Cut.” Then navigate back out to your project’s root folder (the one that contains the “Intermediate” folder). If it doesn’t exist, create a new folder called “Plugins”, then paste the “NativizedAssets” folder into it.

  3. Now switch back to Visual Studio and build the server target. It should pick up the sources from the NativizedAssets plugin folder.

  4. If you need to switch back to building the “Editor” config in Visual Studio, you’ll need to make sure to remove the “NativizedAssets” folder from the “Plugins” folder inside the root folder of your project. Generally you can just move it back into the “Intermediate/Plugins/WindowsNoEditor” folder.

FWIW, this process was improved a bit in 4.17 as the .uproject file is auto-updated to include the intermediate plugins folder when you change the nativization method inside the Project Packaging settings. That helps to avoid the need to manually copy the plugin folder around when switching between building editor/game/server configs in VS. However it does have a few issues we’ve since found that are still being ironed out.

Let me know if this does not work for you, hope this helps!

Thank you very much! This works like a charm with Unreal Engine 4.16.3. It is a great feature as it considerably improves the performance. You really made my day!

I will also point to your reply in this issue: Dedicated server and Blueprint Nativization - Blueprint - Unreal Engine Forums as it was also requested there.

I cannot test with 4.17 yet due to different issues, but for now, all is great!

No problem! Glad it worked out!

I’m afraid I cannot make this work with the new 4.18 release. I copied the nativized assets from Intermediate\Plugins\NativizedAssets\Windows\Game to Intermediate\Plugins\NativizedAssets\Windows\Server, because I got a compiler warning message about missing assets when building the server. The compiler message no longer occurs, but the server still does not run properly and complains about missing assets :-(. Could you please give me a hint how this is done in 4.18?

Hi ,

Apologies - the Blueprint nativization build pipeline has changed a bit in 4.18. There is some documentation of this in the release notes here (see the “Upgrade Notes” and “Programming Upgrade Notes” sections towards the bottom), and we are working to update the official documentation with more details.

Briefly, it is no longer necessary to manually copy the plugin folder around like it was in 4.15 in order to build the C++ target after cooking. Additionally, it is no longer necessary to add ‘-nativizeAssets’ to the command line; instead, the tools now just look at the current value of the ‘BlueprintNativizationMethod’ setting in the Project settings->Packaging UI (it is also possible to override that setting on the command line, let me know if you need to do that).

So that I understand, are you building both the ‘Game’ and ‘Server’ configurations? Or are you building a ‘Client’ and ‘Server’ configuration?

From your description, it sounds like you are building ‘Game’ and ‘Server’. In that case, make sure you run a separate cook for both the ‘Game’ and ‘Server’ targets (TargetPlatform=WindowsNoEditor and TargetPlatform=WindowsServer, respectively). That should result in a NativizedAssets plugin for each cooked configuration. Once you’ve done that, then you should have the proper cooked content/source required for each target, and you can run your C++ build tasks for both the game and server binaries.

Let me know if that doesn’t resolve the issue for you. Hope this helps!

Thanks, cooking with TargetPlatform=WindowsServer separately, then it works like a charm! This is really a great feature! I suppose you’ve put a lot of work into this - some documentation would really be great, this surely is useful for most network games.

Awesome!

Yes this part has been a bit fluid over the past few releases but we’ll try and get some more detailed documentation in place soon, thanks!

Sorry to be reusing this issue again, with 4.18 this was working fine, but now using 4.18.2 I can no longer cook content with TargetPlatform=WindowsServer, I’m getting Assertion failed: PlatformFormats.Num() [File:D:\Games\Unreal Launcher\Epic Games\UE_source\Engine\Source\Runtime\Engine\Private\TextureDerivedData.cpp] [Line: 371].
Cooking textures for the server is probably not needed, but I don’t know how to cook only Blueprints for Nativization. So again I cannot use nativization for the server. Should I create a new issue for this or is there a different approach which I don’t know?