Reasons to use Forge over UNET or other solutions:
We provide full source code for every platform
No plugins needed, all source in native Unity C# code
Fast support. We focus on our system and can get bugs fixed in days, not months. Also since full source is provided, the community can submit bug fixes or features
Requirements Unity 4.6x or 5.x Unity 4.6x free requires Good Ol’ Sockets
Version Notes - Please see post below for further release information Release V2
Removed the serialize easy position, rotation and scale
Added new serialization of position, rotation and scale so that you can serialize individual dimensions (like just x or both x and z, etc.)
Updated comments for Simple Networked Mono Behavior class
Updated Start Game to use main thread manager rather than depend on networking manager
Updated Start Game to not need the Update any longer
Added comments to the Start Game
Release V1
Moved all code from DLL to Unity
Fixed buffered RPCs not clearing correctly
Fixed issue with RealSenderId constantly being set to server identity
Using NETFX_CORE preprocessor so Windows Store and Windows Phone do not need a plugin DLL
Fixed connection issues with connecting Windows Store applications to servers on other operating systems
Added new MainThreadManager class, just call MainThreadManager.Run(method); to run a method on the main thread
Removed the duplication of main thread action handlers from NetWorkerKiller and ArbiterAPI
Updated ServerAPI to use new parse cloud RESTful methods
Update HTTP to have better support for get parameters
Improved stability of threaded HTTP request
Added HTTPS request fixes
Fixed Arbiter API to register online servers correctly
Fixed server browser
We are still waiting on review for the asset store release but for now you are able to purchase through our website! Feel free to discuss on our forums at http://forums.forgearcade.com/ if you have any questions, or comment below here.
Just an update! We have released 6 versions in 4 days! The following is a list of all of the updates we have done.
Release V1:
Moved all code from DLL to Unity
Fixed buffered RPCs not clearing correctly
Fixed issue with RealSenderId constantly being set to server identity
Using NETFX_CORE preprocessor so Windows Store and Windows Phone do not need a plugin DLL
Fixed connection issues with connecting Windows Store applications to servers on other operating systems
Added new MainThreadManager class, just call MainThreadManager.Run(method); to run a method on the main thread
Removed the duplication of main thread action handlers from NetWorkerKiller and ArbiterAPI
Updated ServerAPI to use new parse cloud RESTful methods
Update HTTP to have better support for get parameters
Improved stability of threaded HTTP request
Added HTTPS request fixes
Fixed Arbiter API to register online servers correctly
Fixed server browser
Release V2:
Removed the serialize easy position, rotation and scale
Added new serialization of position, rotation and scale so that you can serialize individual dimensions (like just x or both x and z, etc.)
Updated comments for Simple Networked Mono Behavior class
Updated Start Game to use main thread manager rather than depend on networking manager
Updated Start Game to not need the Update any longer
Added comments to the Start Game
Release V3:
Fixed warnings with Unity 5 and the platform checks in StartGame
Added new [NetSync] attribute so that it is easier than ever to replicate a variable across the network
[NetSync] Now can have callbacks so that you can execute methods upon change of the value of the variables!
Added more comment documentation into NetworkedMonoBehavior
Commented NetRef
Added new global NetworkCallers enum
New Ping methods implemented in the core system to better track network latency
Added license (seat) count to your profile page on the developer portal
Fixed runtime warning in NetWorker for editor catch exception e log
Release V4:
Added some helper messages and exceptions for new users
Fixed bug where Type byte was having issues being sent as a parameter of RPC
serverDisconnected event is now called on client when the host forceully closes with a string message
The main player is now accessable statically through NetworkedMonoBehavior.Player
Added new BeardedManStudios.Network.Cache static class for easy transient key-value storage (to become persistent)
Added a indexer for the BMSByte (opperator overloading for the [ ])
Fixed WriteRaw to prepend with proper byte before sending
Added an optional bool to the BMSByte constructor to prepare for raw
Cache class now communicates with server/client and allows for storing of data bound to a string key
Fixed bug with using alternative BMSByte constructor
Now WriteRaw can be reliable if a reliable key string is provided
Updated documentation to use NetworkedMonoBehavior as to not confuse new users
Release V5:
New enforced input based authoritative server controls (including mouse) on NetworkedMonoBehavior
NetworkedMonoBehavior now has client side prediction as an optional boolean
Updated the layout for the NetworkedMonoBehavior editor (Will make it look pretty very soon)
New disconnect method for when application quits on SimpleNetworkedMonoBehaviors
New destroy on disconnect option for NetworkedMonoBehaviors
New documentation layout on the website so that it is easier to look through
New autostart scene and script. Now you can have unity auto build and start (N) clients for testing
Release V6:
Updated the exception text when instantiating objects not in the lookup for better steps to fix
New packet loss simulation for UDP (Can be set in StartGame script inspector See StartGame.cs for implementation)
New latency simulation for UDP (Can be set in StartGame script inspector See StartGame.cs for implementation)
Fixed error with Unity 5.0.1 having issues with the editor window
Made time inbetween pings longer, it was just too short
Added experimental frame number on inputs for authoritative input
Release V7/7.1/7.2:
New callback method allowed for when you do a Networking.Instantiate
New NetworkStart virtual function that can be overridden and used rather than doing networked based things in the Start function
Fixed rare critical bug where 2 classes that derive from SimpleNetworkedMonoBehavior are sorting differently on different builds
Fixed race condition with Networking Manager and its Awake method
Fixed new race condition with Networking Manager with Instantiate
Release V8/8.1:
Position, Rotation and Scale on the NetworkedMonoBehavior can now be independantly lerped
Updated the website tutorials to include running a headless linux server
Second upload to the Asset Store
Instantiate callbacks now only called on the machine that requested the instantiate
Release V9/9.1:
Removed useless diagnostics log in the SimpleNetworkedMonoBehavior
Now you can have any derivitive of a SimpleNetworkedMonoBehavior on any child objects in a prefab and multiple ones
Multiple SimpleNetworkedMonoBehavior scripts on one object
Fixed a bug that happens on a long running instance where rpc can cause out of range buffer issue
Release V10/10.1/10.2/10.3/10.4/10.5/10.6:
Updated the crash that was happening on the master server during LINQ expression
Fixed issue with AddNetworkVariable having null NetSync causing null reference
Add a disconnect to the main thread manager check
Main thread manager is now created at runtime when connecting or hosting
Updated the NetworkedMonoBehavior UI bugs on lerping position, rotation and scale
Updated the NetworkedMonoBehavior UI so that the colors match the action better
Fixed issues with iOS not connecting and creating a player properly because of race conditions
Fixed issues with static cache causing problems with multiple open sockets
Fixed max player count for Master Server
Fixed the Networking.Disconnect to not be dependent on the networking manager
Fix for the servers not updating the player count on the master server
Fixed spamming of the ping for master server
Fixed max player count
New master server
Server browser updated to work with master server
Striped out arbiter from menu as it will be revamped and current functionality can be replaced with master server
Cleaned up BMSByte code
Removed warnings on editor script
Updated UI for NetworkedMonoBehavior
Updated disconnect bug on UDP
Updated networking disconnect to validate owning netWorker before closing webplayer policy server
Updated the quick start menu
Fixed server list class to support new master server get hosts method
Added master server ip string to the start menu
Start menu will register a server if a master server ip address is provided
Fixed bugs related to multiple connections in networking manager
Release V11/11.1/11.5/11.6/11.62/11.65:
Created a reset for SimpleNetworkedMonoBehavior when disconnecting from network
Clients disconnecting and reconnecting with the Networking.Disconnect(); method will now be able to reconnect correctly
Experimental version of NAT Hole Punching ready for larger scale testing
Removed old NAT Hole Punching test server id
Added Master Server helper method to set static ip for NAT hole punching
Added custom read events being properly handled on the server as well
Bug fixes for custom read event on supporting receivers of All, AllBuffered, and AllProximity
Refactored some code for cleanup on Write Custom to be more readable
Updated example scene to include a custom read event handled by the server only
Fixed NetworkingManager.Instance null inverted check in Networking class
BMSBytes can now be serialized across the network with object mapper, which means it will work for RPC calls, WriteCustom and anywhere else that serializes arguments
Ditto the last line except with a byte array
Added rudimentary position offset for serverIsAuthority and client side prediction to control “rubber banding”
Added rudimentary rotation offset for serverIsAuthority and client side prediction to control “angle snapping”
Removed the network object from the buffer of an object that is Network.Destroy();
Server now correctly resets the buffer of objects that have been passed through to others from a destroy
Removed excess code that can cause issues to high velocity games with instantiate and destroying while other users connecting
Cleanup on NetworkingStream properly pass the NetworkID and SimpleNetworkedMonoBehavior that it called from, now correctly assigns itself
Fixes to the buffering of Instantiates and Destroys, will now properly remove all buffers of the object that was destroyed from an instantiate
Added a Powered By Forge Scene
Removed excessive logos from build
Fixed critical non-buffered delete bug for future joining players
Fixed inverted logic error for delete which was found in Bare Metal development
Fixed issue with multiple scripts on single object with authoritative and non-authoritative
Fixed rigidbody issues with mixed NetworkedMonoBehaviors on same object
Fixed collider issues on mixed NetworkedMonoBehaviors on the same object
Added new floating poin input scripts for authoritative model
Master server no longer pings the hosts
Hosts now ping master server as to stay in the list
Release V12/12.01/12.2/12.3/12.31/12.4/12.5/12.6:
Fixed disconnect and reconnect bug so that the host/clients can now disconnect and reconnect
Updated static variables to reset in SimpleNetworkedMonoBehavior
Fixed issue where NetworkingManager.Instance becomes null on disconnect
Fixed issue where player (isPlayer object) was not being destroyed on disconnect
Fixed desync with instantiates and destroys, tested with 34 players and 30 “zombies”
Fixed issue where disconnect was being called two times when a client leaves
Now remote objects can be specified to be spawned for other users
Now support for Forge Transport Object
Added the ability to pass an exclusive id into the constructor of Forge Transport Object
Added new bool getter “DataInitialized” as a part of NetworkedMonoBehavior for when variables have been synced for the first time
Added overridable protected “NetworkInitialized” method as a part of NetworkedMonoBehavior for the moment the variables have been initialized across the network
Updated inverted boolean logic on NetworkInitialized setup
Added overridable “OwnerUpdate” which is an update method only called by owners of a NetworkedMonoBehavior (Removes need of IsOwner returns in update)
Added overridable “NonOwnerUpdate” which is an update method only called by non owners of a NetworkedMonoBehavior (Removes need of !IsOwner returns in update)
Added overridable “OwnerFixedUpdate” which is an update method only called by owners of a NetworkedMonoBehavior (Removes need of IsOwner returns in fixed update)
Added overridable “NonOwnerFixedUpdate” which is an update method only called by non owners of a NetworkedMonoBehavior (Removes need of !IsOwner returns in fixed update)
Fixed error text for override start to also include override NetworkStart
Removed redundant initialize object calls on instantitate
Fixed race condition with RPC calls being received by the server before the object is setup
New drag and drop chat system
Fixed initialization of objects already in the scene
Optimized how objects are initialized across the network to remove redundancies
Fixed issue with interpolation on latest build
Fixed RPC issue where others would call itself
Fixed issue with serializing a byte array before other data types in an RPC call
Added overridable method for when player leaves proximity of current player
Added overridable method for when player enters proximity of current player
Added event to fire when player leaves proximity of current player (good for things like disabling renderes)
Added event to fire when player enters proximity of current player (good for things like enabling renderes)
The current Frame index is now supplied across the network for lag compensation (rewinding hit boxes)
Fixed authoritative serialize to make sure to ignore proximity standards
Release V13/13.1:
NetworkReceivers.Owner has been added so now only owners of a particular object can be targeted
Individual values can now ignore interpolation with NetSync.Interpolate.(True|False) - Default is true, this only works if Network Interpolation is turned on
Updated core to support owner receivers. This targets the owner of the SNMB only
Only writing exception files on UNITY_STANDALONE
If Linux selected as build mode, StartGame will have auto start server option
Extracted logic from UDP to be global logic for packet read
New public Send method in NetWorker to send raw byte[ ] messages to any endpoint
Updated the core Forge framework to make it more compatable with TCP
Updated bug in core framework reliable packets with multiple end users
Reliable packets have been better optimized for targeting players more efficiently
WriteRaw now updated for targeted use cases and reliable is actually reliable
Reliable responses happen quicker and do not need to be added to multiple places anymore
Fix for issue NetworkedMonoBehaviors exception that was being thrown with long lived transport
Updated the default update time for the network to cut bandwidth in half by default
Updated NetworkedMonoBehaviors to have no dependency on main thread when replicating values
Fixed issue with position desync randomly happening
Fixed issues with NetSync interpolation being defaulted to false
Fixed issue with callback not firing from NetSync on non-interpolated values
Fixed HTTP library, you are now able to do HTTP (REST) requests once again
Fixed WinRT to be able to compile with all the new additions
Added new simple Task class in the BeardedManStudios.Threading namespace which will continue to be extended and updated
Networking.connected now returns the socket that was connected
Servers can now ban IP addresses for a given amount of time in minutes
[ManualNetSync] added to manually serialize data type rather than doing it on change, use this the same way you use [NetSync], call “SerializeManualProperties” when you want to serialize them all
Moving from one scene to the other no longer will throw error for missing base.Start call
New UnityEventObject for firing arbitrary events during standard unity method calls on a GameObject
Various performance improvements related to serializing NMBs
Networking.Instance.clientLoadedLevel event added that fires when a client loads the level
Networking.Instance.allClientsLoaded event added that fires when all clients have loaded the level
Wrapped the error file logging in UNITY_STANDALONE
Find on LAN works once again
Fixed Raw writes
Fixed issue with Networking.ChangeClientScene
Chat window now supports Enter key to submit messages
Well there are quite a few differences actually. The first one that a lot of our users like is that we provide full source code. This way they can alter how the system works to best fit what they need. Also quite few of our newer users come from using UNET for some time actually and were happy with the transition.
We will not be having CCU limitations on the system for larger scale, we actually built the system so that you can create a large scale distributed networking system yourself as well. Another difference that enables this is that we allow multiple socket connections in one instance.
We also have been working on a “non-Unity instance” server (which also will be open source). This will allow you to be able to have a messaging server that is super light weight without having to route through a Unity instance.
Another difference is we offer a server side cache system. This allows you to store data (indexed by strings) on the server and allow clients to query this data as a cache database.
Another difference is that we will be making our Arbiter system available for users as well so that you can develop your own REST api’s and database connections for your server/games. This server is developed and designed in a LAMP structure so that it is easy to find tons of documentation on.
Some opinions on the difference are that we focus on making this networking system, we do not have an entire engine that demands our time (also allows for fast and direct support) :). We also develop this networking system because we are developing our own network games, so that also means we have a stake in the system’s usefulness and success. Also, we focus on creating user requested features. In fact we have a lot of new features that were implemented purely based on our users feedback and suggestions. We have our own portal for feedback and bug reports. We are happy to have such an active community who gives great suggestions and even helps to add to Forge!
I am sure that there are tons more reasons why we are actually getting quite a few people leaving UNET to use Forge, but we have been so focused on our system that we really only look at UNET to make sure that we match it’s feature set.
I have been trying to make my little game work with Unet for about two weeks now. The core game actually works… what does not is the matchmaker…
Now, i am nowhere the skilled programmer that some are here, learning it by myself for a few years now. But i still managed to get the game working…
What i am trying to accomplish here is simple : It is a 1 v 1 TowerDefense game ( For Now ). So i have the simplest form of network : press Play, find a match, if not, create one and wait for someone to get in. All units follow a predetermined path and never stops, so i only sync their " HealthPoints" , while the host handles all the “Spawning turrets here, Spawn unit there”… Pretty simple.
What i need is that system to be reliable and easy to make. That involves having a relay server somewhere, that actually works properly…
Would your solution be good for what i need ? and how hard would it be a nuub programmer like me to make it work the way i need ? ( again, it s all working on Unet, exept i have no little to no documentation and now way of knowing what the heck is going on with that matchmaker ).
So our system is being used for a very large range of games and genres. The system will support what you need out of the box. We also will be releasing a master server system within this week which will have the ability to support matchmaking services. We also have a large number of new users on our system and we do our best to help every single one of them not only with their questions, but to learn all about networking. Our favorite form of tutorials for our system is video tutorials, which eventually will be leading into programming for networking tutorials using our system for beginners to advanced users.
Big Announcement! - Forge Cloud Hosting Beta NO CCU COSTS, NO CCU LIMITATIONS We promised and now we are delivering (as usual). We are officially opening up beta requests for Forge Cloud. That’s right, it is the same cloud hosting we promised from the beginning . You pay for what you use, nothing more.
@Cranick After reviewing the different options for networking in Unity, it seems like a lot of people recommend Forge. I had one question though that might be specific, but I thought it was worth asking. Has anyone used Forge in a console Unity platform, such as Wii U, Xbox One, PS4? If so have there been any issues?
We haven’t had anyone use it for it yet, but as long as it supports sockets then it shouldn’t be too much of a problem. Although when we do get somebody who is using it for those specific platforms, we would like to make sure to knock out any bugs that it may have on them as we don’t have a developer license for those ourselves.
Hi there,
we will be using Forge with Playstation 4 and Xbox One, we have a developer license for both and also the dev kit’s.
So please be aware that we will have a lot of questions around Forge . At the moment however our focus is on polishing the Early Access for Steam we got Greenlit recently and changing our Multiplayer framework from Badumna to Forge right now.
SHORT: Can i use Forge to create matches like in photon without any portforwarding and without hosting my own server/matchmaker?
LONG:
Okay first what i do/need, we are a small indie team (3 people) we are working on a turn based “card/board” game, so we only need so send some RPC’s with the current action (play card X, move unit to positon Y, etc) BUT the most important part, we want the player to be able to host a lobby (max 4 players), we DON’T want to host our own servers, we need something so that the client can create/host a lobby and other play can join without any port forwarding or enterning IP adresses or anything like that.
We tried UNET and it works so far, but there is no information how much the service will cost after the “Beta” so we don’t really want to use it, when we don’t even know how much we have to pay for the matchmaker after the “release”.
We also looked at Photon and it does exectly what we want and we almost wanted to use it, but then we found Forge which says that we have to pay once and can then use it for ANY game without any CCU limit, and of course we want to check that befor using photon and paying ~90€ for 100CCU and maybe even more if we need to upgrade / monthly
But my question is, does Forge really do the same as photon? there is not much information about the matchmaking system, we only found somethng about the “Arbiter”, but it looks like we cant’ test it in the free version because i can’t even create a app on the website and we can’t enter any keys in unity (we watched the videos, so either they changed something or its not possible in the free version)
It seems like the Arbiter does what we need and what photon does, it has a server browser etc but does it really help to connect the people or does it just save the IP and say the client connect to IP X and Port Y and the host would still have to forward ports etc?
Hi!
Networking.ChangeClientScene doesn’t work.
v20, v19.
Errors:
“NullReferenceException: Object reference not set to an instance of an object” - on SceneController’s “Networking.ChangeClientScene(player.PlayerObject.OwningNetWorker, sceneName);” row,
and
“IndexOutOfRangeException: Array index is out of range.
BeardedManStudios.Network.NetworkingStream.Read (Int32 count) (at Assets/Bearded Man Studios Inc/Forge Networking/MainScripts/Core/NetworkingStream.cs:454)”
code:
using UnityEngine;
using BeardedManStudios.Network;
using UnityEngine.SceneManagement;
using System.Collections;
public class SceneController : SimpleNetworkedMonoBehavior
{
string sceneName = “DefaultSceneName”;
I am really interested in forge it seems to be the perfect middle for me
I just have a couple of questions, I hope you will be able to tell me yes or no, @farrisarts :
Can I really just use simple UDP packet to be efficient as I want without the hassle of handling the ack ?
Would it be possible to transform my custom master server into a matchmaking server ? I don’t want the client to be able to cheat a choose their opponent.
I know it is not officially supported but if I get a PS4 dev kit would you help us get everything working ?
I like understanding what is under the hood, is there a place where I can ask more specific question if the need be ?
I will be making pretty much my own packets and I need as little overhead as possible. I will need to make my own predictions on both client with a rollback system.
I’m scared the system would force me to do certain things that would destroy that.