photo

Galaxy Network

Recommended Posts

Hello. I am developing a networking framework for a number of game engines that support c#. I recently made it to Unigine and am now integrating the Galaxy Network with this great game engine. In this thread, I would like to share the latest news and answer your questions.

I'll tell you a little about the network solution.

Galaxy Network is a client and server part with a set of basic functionality, capable of operating both in a fully authoritative mode and in a relay mode. The server supports Windows, Linux and MacOS.

I'll tell you briefly about the functionality and paint it in different colors.

  • Green is what has already been tested and works in Unigine.

  • Yellow - running, but testing is incomplete.

  • Red is something that still needs to be done.

 

Net:

  • Login / Register

  • Accounting for network connections

  • Automatic work with NAT

  • Automatic reconnection

  • Traffic encryption support

  • Packet spoofing protection

  • Support for messages with and without guaranteed delivery, with sorting, with priority.

  • Support for automatic drop of obsolete messages.

  • Routing (server, client, instance, entity)


 

Instances (rooms, worlds, locations)

  • Creature

  • Getting the list

  • Instance manager

  • Sending a message to all clients of an instance

  • Support for client management (client-side logic execution)

  • Automatic and manual host transfer for non-authoritarian or partially authoritarian logic

  • Full support for authoritarian logic (execution of logic on the server)

  • Physics support

  • Supports network frames from (1 to 120 network fps)

  • The ability to set a password to enter

  • Ability to create invisible instances


 

Network entities (network objects)

  • Create / delete

  • Server physics support

  • Support for an authoritarian model.

  • Support for a non-authoritarian model.

  • The ability to transfer an object to another player, or transfer to an authoritarian model.

  • The ability to balance objects between clients 

  • The ability to directly exchange messages between entity instances

  • Entity creation and deletion functionality (node)

  • Built-in synchronization of position and orientation in space

 

Other functionality

  • Built-in protobuf support

  • Built-in Bit serializer

  • There is no database dependency. Any .net compatible one can be used.

  • Physics

  • Server-side physics is present, but collider baking for Unigine has not yet been implemented. I will update this paragraph with specific capabilities when I complete the integration.


 

Despite the large functionality supported by the kernel, I still have a lot of work to turn GalaxyNetwork into a convenient plugin for Unigine. Thanks for your attention.

 

 

  • Like 5

Share this post


Link to post

Connecting the Galaxy network to the “Third Party Platform” example. It took 15 minutes to get the result and two small components (network initiator and NetPlayer)

 

  • Like 3

Share this post


Link to post

Added chat support.

Channel world (communication between all rooms and locations).
Channel room (only within the current room, or location).
System channel. (display of technical messages)

image.png.527a0dff7f059863f82674859d800ed8.png

  • Like 1

Share this post


Link to post

Hello Denis, very interesting project... we are looking into integrating multiplayer in our game where can we know more ?

Share this post


Link to post
1 hour ago, fred.naar said:

Hello Denis, very interesting project... we are looking into integrating multiplayer in our game where can we know more ?

You can find me on the community Discord and ask all your questions.  Or write to defraswiew@gmail.com.  In any case, in the next few days I will try to publish a network template for Unigine and a short instruction on how to work with it.

Share this post


Link to post

And here is a small instruction for installing galaxy network. You can start testing. The core of the network solution has already passed numerous tests, including in commercial projects, but we are the first in Unigine, and therefore our path in this game engine is just beginning.

 

1) Download the repository.  https://github.com/defraswiew/GalaxyCore

image.png.2efb1020ddc33bf5948ce4de5c196b37.png

2) Open the server project from the Templates / SimpleMmoServer directory. By default the server uses net. Core 2.2, you can change the version to any version 2.0 and higher

image.png.1afa17bcbbb6cb1a43962fe5f045e5d5.png

3) Create a new project unigine version 2.11 or use an existing one.

image.png.65e4f23e56ab8452f86e256cd7d07fa8.png

 

4) We open the project in the IDE.
Add all libraries from Templates / Unigine / Libs directory to Assemblies.

image.png.e2c82a8f527111e52e5ea7af51edab5e.png

image.png.d144974adc2cfd6abf756e12abe28af6.png

5) Drag the contents of Templates \ Unigine \ ToProject \ ToSource to the project source 

image.png.e62c79c7623fe82d3584e4fd5dd0bf1d.png

 

6) Add the following code to main
UnigineGalaxyNetwork unigineGalaxyNetwork = new UnigineGalaxyNetwork ();
Engine.AddPlugin (unigineGalaxyNetwork);

image.png.9077d8938d4e04435ebf2fb187b5ffa1.png

7) Add content emplates \ Unigine \ ToProject \ data
to the data folder inside your project.

image.png.9d14a4adb9c2163fa9745423a1b64b5d.png

 

This completes the installation.

To make a node networked, you need to add the UnigineNetEntity component to it.
In order to automatically create foreign objects, you need to add an empty node with the GalaxyNetworkInstantiator component to the scene

image.png.522dbad2a14294c1aa74a915e3dc9015.png

Note. This component searches for a node by name.

 

 

This was a quick guide to installing the galaxy network.
Soon I will post an example project and several video instructions on working with the plugin. If you have any questions you can ask me on Discord. https://discord.gg/mHQHyae

Share this post


Link to post

Link to download the network adaptation of the standard demo project csharp third person platformer.
The project serves as an example of simple creation of a network player, and work with sending messages between objects.
Do not judge strictly, I could have done something wrong, I just started my journey to unigine.

https://drive.google.com/file/d/1KOi2ZCBiRB9NGytwuSaNI-xQAZ6BRS1X/view?usp=sharing

image.png.30ae74ce17bce8fb4d3f6652d6e59154.png

Share this post


Link to post