![GONet](https://assetstorev1-prd-cdn.unity3d.com/key-image/c47a61ab-75af-46a5-94bf-bcbefa6d3995.jpg)
Quickly add multiplayer capability into your game. GONet is the high-performance code base that optimizes resource utilization so your multiplayer game can do more fun stuff players love.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. (Discord) (Learn)TL;DRState 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*GONet == solution (auto-magical data sync & value blending & compression & encryption, extensible pub/sub events, High+Low level API, 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)*IL2CPPAuto-magical data sync:*Transform - position, rotation, scale*Animator Controller parameters*Any MonoBehaviour fields ([SyncVar] replacement)*Input state (keys, mouse, buttons)*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+ReplaySerialization 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 requestsGeneral:*Late-joining clients support (i.e., receive all current world state)*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 likeRecommended Minimum System Specifications (Running GONet Games):*Baseline requirements listed on Unity site: https://unity3d.com/unity/system-requirements*64-bit CPU with 4 coresLet 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.Asset uses log4net under Apache License, Version 2.0; see Third-Party Notices.txt file in package for details.Asset uses Bouncy Castle Crypto under Apache License, Version 2.0; see Third-Party Notices.txt file in package for details.Asset uses Class Type Reference under MIT License; see Third-Party Notices.txt file in package for details.Asset uses Message Pack under MIT License; see Third-Party Notices.txt file in package for details.Asset uses Memory Pack under MIT License; see Third-Party Notices.txt file in package for details.Asset uses Netcode.IO.NET under MIT License; see Third-Party Notices.txt file in package for details.Asset uses Reliable Netcode under MIT License; see Third-Party Notices.txt file in package for details.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.