Skip to content

galore-interactive/gonet

Repository files navigation

GONet

Quickly add multiplayer capability into your game. GONet is the high-performance code base that optimizes resource utilization so you multiplayer game can do more fun stuff players love.

Here is the Unity Asset Store description:

GONet is the Unity3D GameObject Networking solution with tight, developer-friendly integration into the Unity architecture/runtime. If you need to network something and a GameObject is involved, GONet is the answer.

TL;DR
State of affairs for multiplayer/networking in Unity:
Netcode for GameObjects (NGO) can leave much to be desired
(NetCode for) Entities can be a real challenge to adopt
*Other multiplayer/networking options do an OK job of integrating with Unity (some things done well and others not so well)
*You need a robust Unity-centric networking library now to deliver your multiplayer game to fans
*GONet == solution (auto-magical data sync & value blending & compression & encryption, extensible pub/sub events, pure C# w/ all source code)

GONet mantra:
-doing the easy/common stuff should be dead simple (no programming)
-doing the (seemingly) hard stuff should first be possible and second be approachable
-high performance and low resource utilization are kept at the forefront of design, development, decision making and implementation details
-there is much more to a great networked multi-player game than syncing transforms, GONet helps take you the rest of the way with features and implementation experts to "save your bacon"
-there is no "asset fairy" to auto-magically multi-playerify your entire game; BUT a robust toolset is a must - enter GONet
-TCP has no place here (AAA studio grade solutions are UDP-only when any competitive and/or near-realtime gameplay needs exist - GONet is UDP-only)

NOTE: Instead of slow runtime reflection or error-prone/confusing byte weaving, GONet utilizes (automatic) design-time code generation that is runtime debuggable. Unity-friendly multi-threading where appropriate. Works well with default settings, but tweak away as needed. REPLAY support is out of the box (PRO Only)! And the box is not black, as source code is included.

FEATURES:
Wide platform/runtime support:
*All managed C#, no native libraries
*Ahead of Time (AOT) compilation support (e.g., iOS)
*IL2CPP

Auto-magical data sync:
*Transform - position/localPosition, rotation/localRotation, scale
*Animator Controller parameters
*Any MonoBehaviour fields ([SyncVar] replacement)
*Omni-directional from owner to non-owners (server and clients alike)
*GameObject.Instantiate() is auto-magically networked from the owner/instantiator to all interested parties/machines (optionally use a prefab alternate for non-owners)
*You control sync settings applied to groups of data items: default and/or user-defined (via profiles/templates, for when you want/need more control)
*Auto-magically blend smoothly between received values for non-owners: default interpolation/extrapolation and/or user-defined implementation (great for dealing with unreliable "streams")

Event Bus:
*Publish and subscribe to your own omni-directional (arbitrary content between server <-> clients) communication ([Command], [ClientRpc] and [TargetRpc] replacement)
*Auto-magically sync'd changes also (automatically) publish events to which you can subscribe (e.g., energy dropped below 10 => change avatar material)
*Transient events - delivered to clients connected to game session when event occurs
Persistent events - like Transient event with additional delivery to any clients connecting to the game session after event occurs and will exist in recorded/replay data
Any user-defined event class - can be either transient or persistent
Promotes industry proven event-driven game architecture and facilitates GONet Record+Replay

Serialization options:
Default Auto-magical data sync: custom bit packing (with LZ4 compression)
Default Event Bus traffic: MessagePack (with LZ4 compression)
User-defined custom overrides: if you have special cases or feel you can do it better, by all means, a mechanism to do so is provided
Configurable value quantization: choose # bits to occupy and auto-magically quantizes/compresses to fit (great for LOD, see below)

(PRO Only) Record+Replay GONet sessions:
(PRO Only) Everything GONet sends and receives is recorded (server and clients alike)
(PRO Only) Replay the recorded gameplay. Great for: (eSports) In-game instant replay, Location Based Entertainment takeaway not to mention development troubleshooting and bug reproduction (i.e., a "save your bacon" feature)
(PRO Only) Recorded session data feeds into time series, statistics-based graphs for analysis during development and perhaps more importantly after game is released

(PRO Only) Level of Detail (LOD) management:
(PRO Only) Control the Who/What/When/Where/Why/How of data detail
(PRO Only) Default implementation uses distance to client's main player controlled GameObject (closer = high data resolution, further = lower data resolution...down to excluded entirely)
(PRO Only) User-defined custom overrides: decide what causes changes to a GameObject's data LOD, when it should be applied, how much it affects LOD, etc...
(PRO Only) Facilitates large worlds and/or large numbers of networked GameObjects and sync'd values (e.g., MMO)

Network Transport:
*High level (just add GONetParticipant to GameObjects for transform/animation and [GONetAutoMagicalSync] to MonoBehaviour fields/properties and you are in business)
*Mid level (create/publish/subscribe custom events and also fine tune available network settings to meet particular needs)
*Low level (send/receive/manage data however you need to, but you probably will never need this)
UDP (unreliable+unordered) and RUDP (reliable+ordered UDP)
Encryption (customized version of Bouncy Castle Crypto API)
Configurable channels (optional)

Network topologies:
Dedicated game server (client-server DGS)
Local (LAN): good for location-based entertainment (LBE)
(PRO Only) Peer-to-Peer (P2P): NAT punchthrough etc...

Support:
Basic tutorials, examples and forum/email back and forth as time/resources permit
(PRO Only) Fixes to unique and/or uncommon bugs/issues
(PRO Only) Screen sharing collaboration sessions and more in-depth responses at front of email support line
(PRO Only) Access to extensive example projects with detailed documentation
(Premium Only) GONet support team working directly with your team with off-site and on-site options
(Premium Only) GONet custom feature requests

General:
*RigidBody support
*Run-time authority transition (e.g., client to server for projectiles)
*Source code (well commented and debuggable C#)

Logging:
*Built atop the robust, well-known log4net api/library
*Writes to Console in editor and to "logs/gonet.log" file in builds
*Outputs logging level, thread #, system time, frame time and your message with every log statement (if you have ever performed troubleshooting on a networked game, you know this is one of those "save your bacon" features)
*Used in GONet code and fully available to use wherever you like

Recommended Minimum System Specifications (Running GONet Games):
*Baseline requirements listed on Unity site: https://unity3d.com/unity/system-requirements
*64-bit CPU with 4 cores

Let GONet take on the most difficult burden you face, so your team can focus on interesting creative matters. GONet integrates nicely into existing game project code bases and effortlessly for those lucky to be in green field development.

Manual and API Documentation Please discuss GONet in the forum Contact support to discuss consulting assistance for implementation/integration/migration with your game project team. We have a multi-tiered support structure to suit your needs, from trivial to highly involved. Our implementation experts will help you from getting off the ground up to crossing the finish line with you.


Thanks for making all the way! When it comes to getting your game networked and multi-player capable, you need to know what you are getting yourself into. GONet is the real deal.