Download

Missing serious network code

My 15 men studio has been making a FPS with Unity for about 18 months now yet we are seriously considering to switch the project to UE4.

Unfortunately we don’t see any solid Network engine implemented at this moment as hoped with for example a dedicated server implementation like in Unreal Tournamet and a couple of communication methods encrypted/unencrypted reliable/unreliable.

Are you guys planning to add this later or are you counting on 3rd party software developers like Raknet or uLink to take care of the job?

Also, when can we expect to see the Unreal asset store?

Thank you
Best regards
David

Look harder, because I can’t believe you didn’t find anything!

Unreal 4 has built in networking support and the binary can be run as a dedicated server - this basically hasn’t changed much since UE3. Append the -dedicatedserver command switch to the normal binary to run the game in dedicated server mode.

Even if there is really no network code built-in, C++ access means you can easily integrate any networking library of your choice, be it RakNet or eNet. I don’t think uLink has support for anything other than Unity, so forget that one.

Theres definitly UE4Server build target in source code

Look at the shooter game example, it has multipalyer and steam integration.

Our engine has been designed with networking in mind since Unreal Engine 1. There are many ways already to launch a game as a server.

<mygame.exe> <mymap>?listen -game would launch the editor in game mode with your map in a game and listen for clients
<mygame.exe> <ipaddress> -game would launch the editor in game mode and connect client to the above game

This is the “listen server” method and would essentially have one client app also running as a server.

<my.exe> <mymap> -server would launch your map as a dedicated server listening for clients (connect the same way)

When you start to prep a build for release/staging you’ll work with cooked data. In this mode, dedicated servers have standalone executable mygameserver.exe that are fully optimized for multiple instances per machine. Renderering, audio, and everything you’d expect to be “off” is disabled to use a minimal footprint both in memory and cpu.

mygameserver.exe will run the cooked data and is the equivalent to the -server option above. It runs in a fraction of the memory footprint of PC clients.

There is a lot of information here. Network replication is part of our engine, we have client/server remote procedure calls. Just a lot to digest, I would start with shootergame to look at the syntax and flow and I’m happy to answer further questions.

Take a look in some of the examples, code snippets, tutorials etc.
You should come across references to replication, client, server, standalone, dedicated & listen.

eg. Sync character health to all clients:

MyCharacter.h:


    UPROPERTY(Replicated, Category=Health)
    float Health;

MyCharacter.cpp:


int32* AMyCharacter::GetReplicationList(uint8* Recent, FPropertyRetirement* Retire, int32* Ptr, UPackageMap* Map, UActorChannel* Channel, FReplicationFlags RepFlags)
{
    Ptr = Super::GetReplicationList(Recent, Retire, Ptr, Map, Channel, RepFlags);

    // Replicate to everyone
    DOREP(AMyCharacter, Health);

    return Ptr;
}

eg. Command from client to server:

MyCharacter.h:


    bool bSomeBool;
    
    UFUNCTION(reliable, server)
    void SetSomeBool(bool bNewSomeBool);

    UFUNCTION(reliable, server)
    void ServerSetSomeBool(bool bNewSomeBool);

MyCharacter.cpp:


void AMyCharacter::SetSomeBool(bool bNewSomeBool)
{
    bSomeBool = bNewSomeBool;

    if (Role < ROLE_Authority)
    {
        ServerSetSomeBool(bNewSomeBool);
    }
}

void AMyCharacter::ServerSetSomeBool_Implementation(bool bNewSomeBool)
{
    SetSomeBool(bNewSomeBool);
}

The only thing you need to make sure of is that anything you create is tested in a networked/multiplayer situation.
The good thing is that you can run quick, local multiplayer games using the editor.
It will let you select server type, how many clients, the screen size for each etc.
Very handy.

Thank you guys, UE is very new for us and seeing the answers I feel a bit silly ^^

This said we do have the FPS example, but reverse engineering it to see what it can do and how things work is not replacing proper documentation.
We can see some network stuff here and there and the on the website, but it’s not very clear especially for people like us who have no prior experience with the Unreal Engine.
What’s the replication concept? How to best use it? what to avoid? Can we encrypt some of the communication? Is there delta compression? If yes how to use it?

Perhaps a dedication networking section in the documentation would be a good start?

The artists here are all jumping from joy but the coders are still a scared to do the transition from Unity.

Sorry for posting on this thread, as well… I had a question about the ShooterGame demo that’s on a similar topic. I have no problem with going through the ShooterGame code to figure out how the networking is done here. However, whenever I open the ShooterGame demo from the “My Content” list in the Unreal Engine launcher, it brings up the editor instead of VS 2013, and when I try to right click on a random actor in the “Scene Outliner” pane, and hit “Open xxx.h,” nothing happens. Am I missing something here? It’d be a lot easier to see all the files in a VS 2013 project, rather than trying to page through everything using Notepad++.

uLink does have support for Unreal Engine and CryEngine but they are still in alpha.

While we get our network documentation in order, check out http://wiki.beyondunreal.com/Replication on a well respected UE3 site. While the syntax may be different, the concepts are the same. All of UE4 networking started with UE3 roots and has been further optimized and improved.