Jump to content

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 visibility

  • Server Invoke system


 

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

  • Automatic synchronization of variables

 

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.

 

 

Edited by denis.totmin
  • Like 6
  • Thanks 1
Link to comment

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 5
Link to comment

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 2
Link to comment
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.

  • Like 1
Link to comment

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

  • Like 2
Link to comment

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

  • Like 3
Link to comment

Hi everyone. I want to tell you about the new functionality that has appeared in the version of the network kernel 0.8.1.
Now it is possible to inject entities into a static state. Such entities continue to synchronize, they can still be used as nodes for passing messages, but they create significantly less load on the server. Tests have shown reliable work with 5 million static entities in one room.
The mechanism of network visibility has appeared, which allows sending to the client only the data that fell within its radius of view. This mechanism allows you to build huge mmo worlds with high online.
A mechanism for synchronizing variables has appeared. To synchronize a variable between clients and the server, just put a special attribute [GalaxyVar].
A mechanism for smooth loading of worlds created from a large number of network entities has appeared.
In addition, dozens of different improvements have been added. Unfortunately, at the moment I have not made an example template based on the new kernel version, but this does not mean that it cannot be used. If you have any questions, you can write to me defraswiew@gmail.com or Denis_Totmin # 6228 in discord

  • Like 5
Link to comment
  • 5 months later...

Hello! I would like to share our news with you. Development of GalaxyNetwork version 0.9 is in full swing. The update is huge and affects almost every part of the system. The frame system has been completely redesigned, which frees our hands in the implementation of various hinged algorithms and services, such as, for example, recording a game with the subsequent possibility of replaying. Along with frames, there was a replacement and standard interpolation guaranteeing clear movements even on bad and unstable pings. The pathfinding system has been significantly redesigned, memory consumption has been significantly reduced, filtering algorithms and processing of the final result have been added. The algorithm for creating / deleting and accounting for network entities has been redesigned. Optimization of internal structures has significantly increased, many of which have become available for external use. A large number of 3d mathematics have been imported to implement the complex behavior of any objects from the server side.
Also, the code has undergone significant refactoring and has been brought in line with industry standards. A significant change in api will not allow a seamless transition from version 0.8.1 to 0.9.0 (you will have to refactor the old code a little). We still have a lot of work to do before 0.9 is released. I would like to include all the changes affecting the api in one version, so that all the next updates roll without any problems.

  • Like 5
Link to comment

So, version 0.9.0 has been released. I will try to prepare the asset shortly to facilitate client-side deployment.
Also I would like to answer the most frequently asked questions here.
1) Network solution is only suitable for c # projects.
2) Both float and double coordinates are supported
3) Server part can run on Windows / Linux / Mac
4) The server has a limit of 200 online for versions without a license.
5) Until the official release of GalaxyNetwork, licenses are issued free of charge.
6) Get a license for 200+ clients. You need to contact me. We will discuss your project and select a suitable license.
7) Licenses are issued indefinitely.
8) The number of players in one room, like the number of rooms, has no limits of its own.

Edited by denis.totmin
Link to comment
  • 2 weeks later...

Hello everybody. GalaxyNetwork now supports double coordinates. Thanks to the Unigine team for their support and help with this. To get the version of the libraries compiled for double, you need to contact me.

  • Like 1
Link to comment
  • 6 months later...

This project has not been updated in a while but it is possible to make it work, you can contact the developer of the network engine for help and he will assist you.
I was able to make it work with his help.

Link to comment
×
×
  • Create New...