Search Unity

[NO CCU LIMIT] Forge Networking now OPEN SOURCE

Discussion in 'Assets and Asset Store' started by Brent_Farris, Dec 22, 2014.

  1. CarterG81

    CarterG81

    Joined:
    Jul 25, 2013
    Posts:
    1,773

    I figured I'd give you my perspective the moment I can. I just watched the video after finding out about Forge- about 30 minutes ago for both seeing the video and finding this thread with so much praise (and so much frustration & disappointment with UNET).

    I knew about BOLT from a few months ago, and initially heard great praise for it. Then I dug a little deeper (and mostly over time in the months to follow heard more about it) and what I heard were not-so-good things about it. Looking at the reviews today, I doubled down on avoiding it. Would still prefer UNET since it's free and eventually will be fixed / better documented.

    Photon was the only thing that interested me to abandon UNET so far. I saw the criticisms, I didn't want to use it, but at least it has a strong history. Then I saw Forge and got a lot more interested in it. Enough to watch the video and think of buying it.

    About me: I've spent the last week learning UNET. It all went very smoothly until I spent 18+ hours straight trying to do something as simple as connect a player to the server and customize a single variable. 18 hours of wasted time on a super simple thing is just infuriating. I reach out to the community, but no one knows why I'm having my problem. Even worse, I see the same problems or similar ones flood in with new posts asking for help- all unanswered. Why should I spend an entire week trying to spawn a playerPrefab? This is extremely simple stuff, and worked flawlessly when I hadn't yet customized the NetworkManager. No resources or anyone found to help support UNET. Unity doesn't seem to want to help people learn UNET. Where are the community leaders? Unity is disappointing.

    A big foundation in my belief in using Unity, isn't because Unity is any good. I actually dislike Unity and Unity Engine. However, the Asset Store developers- some of these guys are amazing. I love some and appreciate even more. All the good ones are so helpful. They fix bugs instantly (sometimes literally within an hour of reading about a problem) and they rush to answer questions ASAP- no matter how newbie the person. It's great.

    After reading reviews from the Asset Store, FORGE seemed like the only one that was getting a lot of praise- but more importantly NOT a lot of criticism. The support and constant posts from you guys was a huge attraction for purchasing it. So I watched the video from the asset store, even though I rarely ever click any video when browsing products (Not in Steam on a game's steam page, not in the asset store. I dislike videos and just browse screenshots.)

    This is what the video made me think:

    • Until 0:20s - "Ugh, why are they showing downloading and importing the asset? ZzZzZz..." I think cutting this down to a lot faster (still show it, but show it really fast) would be better. Maybe cut it down to 5s from 20s.
    • Instantly shows the box video (0:21s) hmm.....?! it's just working like that. Seems interesting. *reminded that I hate UNET a lot right now*
    • Super awesome multiplayer isometric shooter @ 0:30s. "Whoa! That is so awesome. It looks so smooth. It definitely works. I am impressed now."
    • @0:36s - "Um, I assume this is that one feature that I don't use nor understand about mecanimation syncing? I will just turn off my brain and claim ignorance until it passes. But hey, look it's actually working unlike Unet!"
    • @0:45s - "LOL wow, holy crap that's a lot of instances. The boxes are falling down as the player connects! How fun :p Whoever did this part of the video is pretty good. Wow, it's all working. It's working. It's NOT Unet!"

    Then I read all the quotes (paused the video a few times to read them all), although I already had read them in the reviews. I have a natural mistrust for quotes, but at the same time: good reviews and praise is an absolute requirement for me to purchase an asset on Unity or a game from a developer.


    TLDR: After 0:30s, the video is pretty great. It's enough of a tease to make you excited and want to learn more. The first 20s are a bit of a turnoff.

    Edit: It would be nice if after it there were a second video which was also really fast, but showed how easy it is to actually set it up. (In UNET, it's as easy as dropping a NetworkIdentity and NetworkTransform. That is very awesome.)
     
    Last edited: Jul 6, 2015
  2. CarterG81

    CarterG81

    Joined:
    Jul 25, 2013
    Posts:
    1,773
    After a bit more resource, I'm sure I will be a won over sale. Just seeing the video of it actually working combined with reading about your strong belief in quality documentation- that alone is enough. The community involvement, forum support, and impressive bug updates / rapid updating is just bonus. A very appealing bonus that speaks to my (very satisfactory) past decisions to trust quality asset store developers (Behavior Designer, Dialogue System, StarScene Software / Eric, etc.) They are the reason I love and choose Unity.

    My only concern is that this (Forge) seems to be focused on authoritative server games. My game is for the most part a more casual "Player is also Server" (UNET's "Host" idea). Just a simple 2D, casual 4-player (maybe more) setup.

    That, and it seems too good to be true, and I am a very skeptical developer who really values his limited time. (I work part time in gamedev, so 20 hour work weeks means I have a lot less time than some of my peers).

    Also as a gamer, I also have a history of having problems with NAT punchthrough and connection issues based on routers. (Usually my friends who would never correctly port forward, which is out of my control- but i always blamed the game.) So Unity's relay server seemed interesting to me.

    I am also confused about your stance on no CCU / DAU. I was unaware Unity had plans to monetize the relay server (for some reason I thought some of their features were part of basic UNET, not the extra paid stuff). Although it sounds great in theory, don't you guys still have to make money / suffer bandwidth costs / insert business conspiracy theory?

    I'm not an amateur entirely, but I'm not a network programmer either or network businessman. The whole CCU / "We Host for You!" / "Bandwith Costs eat up profits!" / business side of networking confuses me. I am unclear what this aspect of Forge means for me. (The No CCU / DAU stuff, and what Forge does for me vs what it expects me to do myself.)
     
    Cranick likes this.
  3. CineTek

    CineTek

    Joined:
    Jul 12, 2013
    Posts:
    98
    UNET is basically offering you to use their master server and let your traffic go through their servers which causes some costs and is often seen with a very limited CCU number for the developer.
    You are free to use your own networking backend though but this is a very advanced topic and then you would have to care about a lot of complicated stuff - that's where UNET, Photon, Forge, etc come in handy.

    With Forge you are able to host your own MasterServer wherever you like. This can be a cheap v-server for example.
    No CCU/message limit and you are in charge for the server(s) yourself! ;)

    Also you are free to do whatever game you want to create - Full authorative (Server to Clients), Client/Server(your method), etc...
    In your case there is actually a demo included in the sample assets from the package! One player acts as the host and client at the same time. All of your sensitive code can still be handled by the server only if you want to prevent cheating.
     
    tatoforever and CarterG81 like this.
  4. CarterG81

    CarterG81

    Joined:
    Jul 25, 2013
    Posts:
    1,773
    That sounds absolutely fantastic. Thank you. Especially for giving us that freedom (No CCU). I will have to trust my instincts on this one and purchase right away.

    Here's to another user leaving UNET for Forge.
     
    Last edited: Jul 6, 2015
    CineTek likes this.
  5. CineTek

    CineTek

    Joined:
    Jul 12, 2013
    Posts:
    98
    I've used Photon before (and Unet for about a week until I wanted to throw my PC out of the window....) and I have been porting the code to Forge recently. It is such a relief to see a piece of middleware software that actually works ;)

    With the examples and the documentation videos in place I actually think that Forge is way more beginner friendly than Unet. Also they have some pretty sick built-in interpolation/extrapolation scripts that work very well with most game types out there. Very easy to tweak and quite optimized
     
    CarterG81 likes this.
  6. Brent_Farris

    Brent_Farris

    Joined:
    Jul 13, 2012
    Posts:
    881
    I've got to tell you guys, this put the biggest smile on our teams faces. We are proud to work hard on an asset that enables developers to make the games they dream of. No asset is flawless, but we believe that with active development and by actually listening to those who use Forge we can get it as close as possible to that idea of being flawless. We truly care about each of the developers on our platform and desire nothing more than to see their ideas come to life!

    We have heard about the slow first 20 seconds of the promo video so we are re-thinking how we can really get to the meat of what people care about rather than wasting time building up. :) Thank you for that valuable feedback!

    Thank you @CineTek yes we support allowing the server to be a client as well as stated :). We have a checkbox in the inspector for when you want to turn the object to be only authoritative.

    Also, thank you so much for supporting the Forge Networking project! Please feel free to send us an email with any feature requests, bug reports, or links and videos to your games! :) Oh, and please feel free to ask us for any kind of tutorial on how to do anything in the system that you need. We want to make sure that our documentation is top of the line! :D

    When we hear things like this, it really helps us to keep going! :)
     
    CarterG81 and CineTek like this.
  7. Brent_Farris

    Brent_Farris

    Joined:
    Jul 13, 2012
    Posts:
    881
    Yes. Unity's specifications for IL2CPP causes no issues with Forge Networking. We are addressing a bug in iOS that is unrelated though.

    We use our own custom setup so that we are not at the mercy of another system. We have heard a lot of issues from UNET and it uses LLAPI so it sounds like we dodged a bullet in deciding to write our own. :D

    Yes, we compress and map as much data as possible. We are also running a bit phase where we will be creating custom data types and shifting algorithms in order to compress our data even further :)

    EDIT: I just noticed that you were already replied to. Sorry about that, I suppose this one is just some extra clarification for others who see it.
     
  8. Brent_Farris

    Brent_Farris

    Joined:
    Jul 13, 2012
    Posts:
    881
    Announcement!

    As always we are staying busy on bug fixes and features. Currently we are working on 3 features which will be seeing their way out in upcoming builds.
    1. Load Balancer (codenamed Gatekeeper)
    2. Completing NAT Hole punching self-host server
    3. Fine tune authoritative controls (We will be allowing developers to be able to set the threshold for syncs: distance, sync types, etc)
     
    CarterG81 and DMeville like this.
  9. CarterG81

    CarterG81

    Joined:
    Jul 25, 2013
    Posts:
    1,773
    o_O :D:D:Do_O

    That right there is too awesome. That measure of confidence makes me think I won't even need to request anything, hehe.
     
    Cranick likes this.
  10. alecie

    alecie

    Joined:
    Sep 2, 2013
    Posts:
    73
    Hey guys, can you tell me how to solve above errors? My development is currently frozen and I'm worried about deadlines.
     
  11. Brent_Farris

    Brent_Farris

    Joined:
    Jul 13, 2012
    Posts:
    881
    Thanks for bumping your question again.

    So it looks like you are not overriding the Start method in your class. Forge requires you to override 3 methods when deriving from SimpleNetworkedMonoBehavior (including NetworkedMonoBehavior).

    So your start method will look like
    Code (CSharp):
    1. protected override void Start()
    2. {
    3.     base.Start();
    4.     // ... Rest of code here
    Your update method should look like
    Code (CSharp):
    1. protected override void Update()
    2. {
    3.     base.Update();
    4.     // ... Rest of code here
    Your awake method should look like
    Code (CSharp):
    1. protected override void Awake()
    2. {
    3.     base.Awake();
    4.     // ... Rest of code here
    The master server is released and so are the preliminary tutorials for them here: http://developers.forgearcade.com/Tutorials#Master Server

    Please let me know if you have any further questions :)
     
  12. Brent_Farris

    Brent_Farris

    Joined:
    Jul 13, 2012
    Posts:
    881
    Version 10.4 Released

    Hello all, I just wanted to let you know that version 10.4 has been released which has race condition fixes that seemed to only happen on iOS and didn't matter if it was on Mono or IL2CPP. It is now working on our devices :)
    • Fixed issues with iOS not connecting and creating a player properly because of race conditions
     
  13. alecie

    alecie

    Joined:
    Sep 2, 2013
    Posts:
    73
    Thanks for the reply,
    I am indeed overriding these methods as in here:
    http://pastebin.com/NeiWsLer

    ---

    Oh, I didn't notice the private message from you, I have updated Forge to the newest version but these error still persist.

    ---

    I didn't notice it before under 999+ errors, but its also throwing warning:

    Try using the Forge Quick Start Menu and setting the "Scene Name" on the "Canvas" to the scene you are loading. Then running from that scene.
    UnityEngine.Debug:Log(Object)
    BeardedManStudios.Network.NetworkingManager:populate() (at Assets/Bearded Man Studios Inc/Forge Networking/MainScripts/NetworkingManager.cs:100)
    BeardedManStudios.Network.SimpleNetworkedMonoBehavior:Initialize() (at Assets/Bearded Man Studios Inc/Forge Networking/MainScripts/SimpleNetworkedMonoBehavior.cs:229)
    BeardedManStudios.Network.SimpleNetworkedMonoBehavior:Start() (at Assets/Bearded Man Studios Inc/Forge Networking/MainScripts/SimpleNetworkedMonoBehavior.cs:246)
    BeardedManStudios.Network.NetworkingManager:Start() (at Assets/Bearded Man Studios Inc/Forge Networking/MainScripts/NetworkingManager.cs:159)

    But I can't find Forge Quick Start Menu. Where is it located?

    ---

    When setting isWinRT to true errors dissappear from unity editor but they still show up in development build.
     
    Last edited: Jul 7, 2015
  14. Brent_Farris

    Brent_Farris

    Joined:
    Jul 13, 2012
    Posts:
    881
    I'll be taking a look at your code soon to see what the issue is, currently I'm on mobile. Thank you for the sample code, it will definitely help track the problem.

    Edit 1: Okay, first pass through there are a few things that I notice, this script is giving me some ideas for tutorials/documentation as well on what to go more in depth to. I can put some changes and comments in the code so it may look a little bit or quite different.

    Edit 2: So the main issue is that you have a networked object in a scene with no networking which is "NetworkMgr". Notice in the start game example there are no networked objects in that scene. Once a connection has been established, the system can then work with networked objects. So you will either need to transfer the player to a new scene with those network objects or you will need to instantiate them on connection.

    This code will work for the connection:
    Code (CSharp):
    1. using UnityEngine;
    2. using System.Collections;
    3. using System.Collections.Generic;
    4. using BeardedManStudios.Network;
    5. using BeardedManStudios.Forge;
    6.  
    7. public class NetworkMgr : MonoBehaviour
    8. {
    9.     [HideInInspector]
    10.     public static readonly string gameTypeName = "Neomex_Exowar_2_Neomex-Studio";
    11.  
    12.     public bool brentTestIsServer = false;
    13.     public bool brentTestDirectJoin = true;
    14.     public string brentTestIpAddress = "127.0.0.1";
    15.  
    16.     public ushort port = 20555;
    17.  
    18.     private string textArea = "";
    19.     private string textField = "";
    20.     //private string textFieldData = "";
    21.  
    22.     private void Start()
    23.     {
    24.         DontDestroyOnLoad(this);
    25.  
    26.         Networking.InitializeFirewallCheck(port);
    27.  
    28.         //if (MultiplayerMenuUI.server)
    29.         if (brentTestIsServer)
    30.         {
    31.             StartServer();
    32.         }
    33.         //if (MultiplayerMenuUI.client)
    34.         else
    35.         {
    36.             //if (MultiplayerJoinMenuUI.directJoin)
    37.             if (brentTestDirectJoin)
    38.             {
    39.                 StartDirectClient();
    40.             }
    41.             else
    42.             {
    43.                 StartClient();
    44.             }
    45.         }
    46.     }
    47.  
    48.     void StartServer()
    49.     {
    50.         NetWorker socket = Networking.Host(port, Networking.TransportationProtocolType.UDP, 3);
    51.  
    52.         socket.connected += OnServerConnected;
    53.         socket.disconnected += OnServerDisconnected;
    54.         socket.playerConnected += OnServerPlayerConnected;
    55.         socket.playerDisconnected += OnServerPlayerDisconnected;
    56.         socket.error += OnServerError;
    57.  
    58.         Networking.SetPrimarySocket(socket);
    59.     }
    60.  
    61.     void OnServerConnected()
    62.     {
    63.         Debug.Log("Server connected!");
    64.     }
    65.  
    66.     void OnServerDisconnected()
    67.     {
    68.         Debug.Log("Server disconnected!");
    69.     }
    70.  
    71.     void OnServerPlayerConnected(NetworkingPlayer player)
    72.     {
    73.         Debug.Log("Player connected: " + player.Ip);
    74.     }
    75.  
    76.     void OnServerPlayerDisconnected(NetworkingPlayer player)
    77.     {
    78.         Debug.Log("Player disconnected: " + player.Ip);
    79.     }
    80.  
    81.     void OnServerError(/*NetworkException exception*/System.Exception exception)
    82.     {
    83.         Debug.Log("Server error: " + exception.Message);
    84.     }
    85.  
    86.     void StartClient()
    87.     {
    88.  
    89.     }
    90.  
    91.     void StartDirectClient()
    92.     {
    93.         NetWorker socket = Networking.Connect(brentTestIpAddress/*MultiplayerJoinMenuUI.directIp*/, port, Networking.TransportationProtocolType.UDP);
    94.  
    95.         socket.connected += OnClientConnected;
    96.         socket.disconnected += OnClientDisconnected;
    97.         socket.playerConnected += OnClientPlayerConnected;
    98.         socket.playerDisconnected += OnClientPlayerDisconnected;
    99.         socket.error += OnClientError;
    100.         socket.serverDisconnected += OnClientServerDisconnected;
    101.  
    102.         Networking.SetPrimarySocket(socket);
    103.     }
    104.  
    105.     void OnClientConnected()
    106.     {
    107.         Debug.Log("Client connected!");
    108.         //ForgeMasterServer.
    109.     }
    110.  
    111.     void OnClientDisconnected()
    112.     {
    113.         Debug.Log("Client disconnected!");
    114.     }
    115.  
    116.     void OnClientPlayerConnected(NetworkingPlayer player)
    117.     {
    118.         Debug.Log("Player connected: " + player.Ip);
    119.     }
    120.  
    121.     void OnClientPlayerDisconnected(NetworkingPlayer player)
    122.     {
    123.         Debug.Log("Player disconnected: " + player.Ip);
    124.     }
    125.  
    126.     void OnClientError(/*NetworkException exception*/System.Exception exception)
    127.     {
    128.         Debug.Log("Client error: " + exception.Message);
    129.     }
    130.  
    131.     void OnClientServerDisconnected(string message)
    132.     {
    133.         Debug.Log("Disconnected: " + message);
    134.     }
    135.  
    136.     void OnGUI()
    137.     {
    138.         GUI.TextArea(new Rect(25.0f, 25.0f, 500.0f, 500.0f), textArea);
    139.         textField = GUI.TextField(new Rect(25.0f, 525.0f, 450.0f, 25.0f), textField);
    140.         if (GUI.Button(new Rect(475.0f, 525.0f, 50.0f, 25.0f), "Send"))
    141.         {
    142.             AppendText();
    143.         }
    144.     }
    145.  
    146.     void AppendText()
    147.     {
    148.         textArea += textField + "\n";
    149.         textField = "";
    150.     }
    151. }
     
    Last edited: Jul 7, 2015
    olonge likes this.
  15. MyIsaak

    MyIsaak

    Joined:
    May 23, 2013
    Posts:
    49
    Hi I would like to request a bug fix on the way one has to setup the awake, start, update methods. Since one must make the method "protected override", I couldn't find a way to override the awake, start, update methods when using another class that inherits from the first class. For instance:
    Code (CSharp):
    1. class Tree : NetworkedMonobehavior {
    2.   protected override Awake() {
    3.    base.Awake();
    4.    // code
    5.   }
    6. }
    7.  
    8. class Apple : Tree {
    9.   protected override void Awake() { // error can't override protected method
    10.    base.Awake();
    11.    }
    12. }
     
    CarterG81 likes this.
  16. Brent_Farris

    Brent_Farris

    Joined:
    Jul 13, 2012
    Posts:
    881
    Hi there! :)

    So there shouldn't be any issue with the way that this is setup if I understand correctly. The following code produced the correct results in the current state of the system.

    Tree.cs
    Code (CSharp):
    1. using UnityEngine;
    2. using BeardedManStudios.Network;
    3.  
    4. class Tree : NetworkedMonoBehavior
    5. {
    6.     protected override void Awake()
    7.     {
    8.         Debug.Log("Hello from Tree Awake");
    9.         base.Awake();
    10.     }
    11. }
    Apple.cs
    Code (CSharp):
    1. using UnityEngine;
    2.  
    3. class Apple : Tree
    4. {
    5.     protected override void Awake()
    6.     {
    7.         Debug.Log("Hello from Apple Awake");
    8.         base.Awake();
    9.     }
    10. }
    1) Add the following line to the first line of the NetworkedMonoBehavior Awake method: Debug.Log("Hello from NetworkedMonoBehavior Awake");
    2) Create a blank game object
    3) Attach the Apple script to the object
    4) Notice logs in Unity console

    upload_2015-7-7_12-1-8.png
    Please let me know if I have misunderstood your question.

    Edit: It seems like in your example a "void" was left out.
    Should be
    Code (CSharp):
    1. protected override void Awake()
    :)
     
    Last edited: Jul 7, 2015
    CarterG81 likes this.
  17. alecie

    alecie

    Joined:
    Sep 2, 2013
    Posts:
    73
    I have MAIN_THREAD_MANAGER in my scene, a camera and nothing more, should I maybe add some components for it to work properly?

    I have changed my code to fit yours example, but I am still getting these errors:

    NetworkException: The NetWorker doesn't exist. Is it possible that a connection hasn't been made?
    BeardedManStudios.Network.NetworkingManager.Populate () (at Assets/Bearded Man Studios Inc/Forge Networking/MainScripts/NetworkingManager.cs:103)
    BeardedManStudios.Network.SimpleNetworkedMonoBehavior.Initialize () (at Assets/Bearded Man Studios Inc/Forge Networking/MainScripts/SimpleNetworkedMonoBehavior.cs:229)
    BeardedManStudios.Network.SimpleNetworkedMonoBehavior.Start () (at Assets/Bearded Man Studios Inc/Forge Networking/MainScripts/SimpleNetworkedMonoBehavior.cs:246)
    BeardedManStudios.Network.NetworkingManager.Start () (at Assets/Bearded Man Studios Inc/Forge Networking/MainScripts/NetworkingManager.cs:159)

    NetworkException: The base class "Start" method is hidden, use "protected override void Start" instead
    BeardedManStudios.Network.NetworkedMonoBehavior.Update () (at Assets/Bearded Man Studios Inc/Forge Networking/MainScripts/NetworkedMonoBehavior.cs:625)
    NetworkMgr.Update () (at Assets/NetworkMgr.cs:124)

    NullReferenceException: Object reference not set to an instance of an object
    BeardedManStudios.Network.NetworkingManager.Update () (at Assets/Bearded Man Studios Inc/Forge Networking/MainScripts/NetworkingManager.cs:166)
     
  18. Cranick

    Cranick

    Joined:
    Nov 20, 2011
    Posts:
    310
    That doesn't seem right, by chance you can send us over a small sample package of your implementation to support@beardedmangames.com so we can help get this resolved asap. Would definitely like to know the cause so that we can go over this in a future video tutorial if it isn't explained clearly. :)
     
  19. MyIsaak

    MyIsaak

    Joined:
    May 23, 2013
    Posts:
    49
    @farrisarts thanks for the help. Turned out i wrote public instead of protected in my code :/ You guys are really helpful ;)
     
    CarterG81 likes this.
  20. Brent_Farris

    Brent_Farris

    Joined:
    Jul 13, 2012
    Posts:
    881
    Haha, no problem, we know how it goes! Feel free to shoot us any more questions :)
     
  21. Keith90

    Keith90

    Joined:
    Sep 27, 2013
    Posts:
    116
    This looks awesome.

    Is there any videos of people using Forge in action?

    I have a couple of questions.

    1) I'm currently making a 4 player 2D fighting type game. Would achieving online for a game like that be simple with Forge?
    2) Is it possible using Forge to make a list of rooms that people have made to join? If so, could you point me to where in your documentation I'd find a starting point. I'd like to have it so players can either create their own room/lobby or join another.

    I can't wait to get my hands on this but sadly I must wait till Thursday when I get paid. College doesn't allow for a lot of working hours or money. Haha.
     
    CarterG81 likes this.
  22. alecie

    alecie

    Joined:
    Sep 2, 2013
    Posts:
    73
    I am no forge dev, but I believe they need some help :D

    1) Relatively easy depending on your skills
    2) You are looking for masterserver
    http://developers.forgearcade.com/Tutorials#Master Server

    And generally before you buy it, you can go through all the tutorials there so when you have the library you can jump straight to coding. Just a tip. ;)
     
  23. CineTek

    CineTek

    Joined:
    Jul 12, 2013
    Posts:
    98
    Forge is very new so besides from the official tutorials there are no other videos out there yet. There is a forum thread by one of the users who is actively working on a third-person shooter game with Forge: http://forums.forgearcade.com/viewtopic.php?f=13&t=44

    I am also developing a 2D game with multiplayer aspects powered by Forge right now. It is not competitiv though - at least not all aspects of it ;)
    So I do not need to worry about the perfect and best netcode even though I am always trying to achieve the best possible... As with fast paced competitiv PlayerVSPlayer games like shooters and fighting games you really need to optimize your netcode and player synchronization as best as possible. All of this is possible with Forge (and with most of the other networking solutions out there) but requires a good skillset and knowledge about multiplayer mechanics.

    For your second question I guess you mean that a player can "host" a game and others can join using a server browser? If yes then you are lucky! Forge has all of this covered over here: http://developers.forgearcade.com/Tutorials#Master Server
     
  24. Keith90

    Keith90

    Joined:
    Sep 27, 2013
    Posts:
    116
    Thanks guys for the replies. I appreciate it.

    My game isn't a fighting game like Street Fighter, but more like Towerfall, if that makes any sense? So hopefully it won't be too difficult to achieve it.

    Once I get it, I'll hopefully be able to figure everything out with the documentation. I've never done networking before so this should be interesting. :)
     
  25. alecie

    alecie

    Joined:
    Sep 2, 2013
    Posts:
    73
    Ok, I've sent you an email.
     
  26. CineTek

    CineTek

    Joined:
    Jul 12, 2013
    Posts:
    98

    Well then it is still a competitiv game and requires some good networking skills to achieve a great experience for your players. Some aspects of game development are harder than others and networking is definitively something completely different. Even Multiplayer masters like DICE (Battlefield-series) are struggling with optimal solutions for their games.

    But I do not want to stop you - just keep in mind that even the original Towerfall game if I remember correctly does not support multiplayer over the network...

    The examples provided by Forge should give you a good idea how to start and their built-in interpolation actually works quite well (better than Photon/UNET). Maybe this is good enough for you? :)
     
  27. Brent_Farris

    Brent_Farris

    Joined:
    Jul 13, 2012
    Posts:
    881
    Thank you @Neomex and @CineTek :)

    If you are new to networking, please feel free to ask us questions and request any kind of documentation. We do have tutorial series planned to teach those who are new to networking a lot of the "ins-and-outs" of how to think, what to look out for, "best" practices, and so forth :)

    As @CineTek said,
    So this is one of the reasons we wish to do this tutorial series. We want not only to make a great networking addon but also help any new network developers to learn about networking in order to be able to achieve their game ideas :)

    @Neomex
    Thank you, we will check it out in our support passes today :)
     
  28. Keith90

    Keith90

    Joined:
    Sep 27, 2013
    Posts:
    116
    I appreciate the input.

    I may wait for now. I knew networking would be hard, so I may just keep this one a local multiplayer game only. Which means, now I have to continue on with programming AI, which was the very reason why I wanted to do networking in the first place so I could avoid it. Haha.

    I'll still be on the look out for Forge and see how things go.

    Thanks for your time and everything. I appreciate it. :)
     
  29. Cranick

    Cranick

    Joined:
    Nov 20, 2011
    Posts:
    310
    Awesome, we will be looking forward to seeing your game in action when you need us, we'll always be here.
     
  30. Keith90

    Keith90

    Joined:
    Sep 27, 2013
    Posts:
    116

    ...well with that much support and politeness, now I have no choice but to get Forge in the future. Haha. Once I have something that I feel more confident to show you guys, then I'll shoot a message with a demo, so you guys could see the vision I have.

    I look forward to hearing all the success you guys achieve. I also can't wait for more tutorials and examples.
     
    Cranick likes this.
  31. GlobalHive

    GlobalHive

    Joined:
    Jan 13, 2014
    Posts:
    18
    Hmm...
    I just saw i need Unity PRO ?
    Is there a way how i can use this anyway (head of an second socket plugin thingy but does that work)
     
  32. tiggus

    tiggus

    Joined:
    Sep 2, 2010
    Posts:
    1,240
    Couple questions as I saw this solution when browsing the networking forum and it looks interesting:

    1) If I want to run a matchmaker is that the Arbiter? Can I run my own Arbiter without paying for the other services such as leaderboards etc.?
    2) I see it says you are working on NAT punchthrough which is something I need. Will the Arbiter(if it is indeed the matchmaker) do the NAT punchthrough setup for clients?
    3) Any reasons this solution would pose problems for a client-server deterministic lockstep game where the server is hosted by one of the players? I do not want to use a relay server.
     
  33. Brent_Farris

    Brent_Farris

    Joined:
    Jul 13, 2012
    Posts:
    881
    You do not need Unity PRO for the system unless you are building to iOS and Android in Unity version 4.x. Where did you see that you needed Unity PRO?
     
  34. Brent_Farris

    Brent_Farris

    Joined:
    Jul 13, 2012
    Posts:
    881
    We now call it the Forge Master Server and it comes as part of the system when you download it. We also offer an additional Unity Independent Master Server which is pure C# code and can run without the overhead of Unity on Windows, Mac, and Linux. :) This does not come with all of the other services, the master server stands on its own now :D

    The NAT hole punching is handled by a separate server, however we can possibly release a version of the new Master Server which will parallel in being the host for the NAT hole punching. That is a pretty good idea! Only 1 server needed :). We always like options though, so we will have a stand alone version for those who want it :)

    This server should not cause any issues with lock step. We have authoritative server options in the system which means all of the calculations will then be handled by the server and distributed to the clients based on their inputs. We are actually working on enhancing the system to support lock step out of the box as well, though it is on hold for until we finish these other critical features. Since you have full source code you can alter and update the system to meet your needs as well if needed :)

    Please let me know if you have any further questions! :D
     
    tiggus likes this.
  35. GlobalHive

    GlobalHive

    Joined:
    Jan 13, 2014
    Posts:
    18
    Well i would use unity 5 and creating games for Windows/Mac/Linux

    An i think i readed something like "How to setup forge for unity free" and stuff about the asset "Good 'ol Sockets" whivh add an .net socket solution thingy
     
  36. Cranick

    Cranick

    Joined:
    Nov 20, 2011
    Posts:
    310
    If you are using Unity 5 you would be fine. If you are just focusing on Windows/Mac/Linux for 4.x version of Unity, then you would also be fine. If you are doing iOS/Android on 4.x version of Unity, then you would indeed need the plugin 'Good 'ol Sockets'. The tutorial video was created back when we had our open Beta and before Unity 5 was released, now that it has been out, we mainly only refer to that for people who are still on 4.x version of Unity.

    Hopefully that answers your question and thank you for contacting us!
     
  37. GlobalHive

    GlobalHive

    Joined:
    Jan 13, 2014
    Posts:
    18
    Great thank you :D
    Now i just need to get somewhere a donation of 10 EUR to purchase it ( was thinking its 60 but its 70 and i buyed stuff which i dont need so my budget for this month stands at 58 eur :()
     
  38. coldzik

    coldzik

    Joined:
    Jan 2, 2013
    Posts:
    12
    Someone can explain me if is in FN something like messages from Unity Networking to communication between client and server, where i can set type of msg and msg?

    EDIT:
    I found in documentation Networking.Write and Networking.WriteCustom, but I don't understand what means "updateindetifier" in Write method... Api documentation of Forge Networking suck's :(
     
    Last edited: Jul 10, 2015
  39. alecie

    alecie

    Joined:
    Sep 2, 2013
    Posts:
    73
    Hey guys, when can I expect reply from you?
    I have mailed you 3 days ago.
     
  40. ZhavShaw

    ZhavShaw

    Joined:
    Aug 12, 2013
    Posts:
    173
    Hey! I was wondering if you guys had a promotional kit.. Or anything that has a the Forge logo.
     
  41. tiggus

    tiggus

    Joined:
    Sep 2, 2010
    Posts:
    1,240
    Perfect, well I'd prefer a different language for Linux so no need for mono but close enough :)

    The overhead is so low I would imagine it can be combined, but if I have to run two separate processes on the same box that is no big deal. Am I to understand that this exists in a downloadable format today for testing? If it does I am willing to purchase this to take a look.

    Thanks, I am sure I will :) Currently I am using Lidgren and to be honest, it works OK. I am looking to refactor some things and make my architecture cleaner and before I do that I want to see if there is a better solution out there that can give me some commercial support which is what I see as the big benefit here.
     
  42. Cranick

    Cranick

    Joined:
    Nov 20, 2011
    Posts:
    310
    Sorry for the delay, we have been extremely busy since we did not expect Forge to get popular faster than we imagined. We are in the process of bringing some people onboard to handle support load. We will prioritize your email today and get back to you asap. Really sorry about this!
     
  43. Cranick

    Cranick

    Joined:
    Nov 20, 2011
    Posts:
    310
    Currently we do not, but we will add that in to our website asap. :)

    Thanks for asking.
     
  44. Brent_Farris

    Brent_Farris

    Joined:
    Jul 13, 2012
    Posts:
    881
    I am not exactly sure what you mean by this, however Forge allows you to send messages in a variety of ways. You can write raw messages (1 byte header), you can use the default NetworkedMonoBehavior serialization of properties, you can use WriteCustom, and you can send information using RPC calls :)

    Yes, the api part of our documentation is still in alpha as we figure out the best method to build out the code documentation. We will be making another build of it soon.
     
  45. Brent_Farris

    Brent_Farris

    Joined:
    Jul 13, 2012
    Posts:
    881
    We were going to write it in C/C++ but this would take quite a bit of time as we wouldn't be able to leverage the current implementation. We may still work on making this possible in the future. Also Microsoft is in the middle of porting .NET to Mac and Linux so soon there won't be any real need for Mono as a middleman :)

    The NAT hole punching will be released hopefully in version 11 (current version in development). The Master Server is available right now though :)

    Thanks, we are actually in the process of growing our support team now so that we can fit the higher demand while not losing out on precious development cycles and updates. Please feel free to shoot us any questions or suggestions you may have as well. :)
     
    Teila and tiggus like this.
  46. coldzik

    coldzik

    Joined:
    Jan 2, 2013
    Posts:
    12
    I tried use WriteCustom, but i don't understand exactly what updateindetifier means. When I use example from your code all is okey, but when i change this public string id = "MyClassThing_01"; to public string id = "LoginCommand"; i got "KeyNotFoundExceptions: The given key was not present in the dictionary"
    in this line Networking.WriteCustom(id, Networking.PrimarySocket, cachedData, true);
     
    Last edited: Jul 10, 2015
  47. Brent_Farris

    Brent_Farris

    Joined:
    Jul 13, 2012
    Posts:
    881
    Woah! I am so sorry, I meant to answer that question.

    Okay so the "unique identifier" is just a unique string value that you assign. You can put anything you want into this, what happens in the background is that your string is mapped to a number and that is used for the communication on the server and the client. Please note that both the server and the client need to register this key value in the same order so that they are mapped correctly.

    We will now create a documentation tutorial page for this topic :)
     
  48. alecie

    alecie

    Joined:
    Sep 2, 2013
    Posts:
    73
    With old unity networking deprecated, UNET having no documentation and plenty of bugs and Photon being more expensive than revenue you will get from the game it was kind of obvious you guys will struck the gold ;)

    Don't worry too much about the delay, I'll be happy as soon as its fixed and I can get back to my project!
     
    Cranick and CarterG81 like this.
  49. Brent_Farris

    Brent_Farris

    Joined:
    Jul 13, 2012
    Posts:
    881
    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.

    Here are some basic Q&A we suspect will be common:

    Q: Am I limited to CCU?
    A: NO! You are free to cram as many users as you want onto the server you are paying for

    Q: Do I have server size options?
    A: Yes! We will have a variety of server sizes and feature sets available at launch. If you need a super simple server, we've got that, if you need a super beefy server, we've got that too! Need to customize your server, just send us a support ticket and we will get you setup with whatever you need :)

    Q: How many servers can I have?
    A: You can have as many servers as you want, spin up 1000 if you need that many!

    Q: What operating systems?
    A: We will host BOTH Windows and Linux.

    Q: If I don't pay for CCU, what do I pay for?
    A: You pay for CPU usage and Bandwidth mainly, and any other usage costs that go beyond what comes with the standard machine such as extra storage.

    Q: Do I need to run a Forge Networking server to host in the Forge Cloud?
    A: NO! :D Any server that runs in a Unity Instance will run on Forge Cloud (though we would recommend Forge if you like our level of support ;)). Forge Networking will allow Bare Metal to run in the Forge Cloud though, which will be a Non-Unity Instance server. Bring your Forge, UNET, Bolt, whatever servers over to host on Forge Cloud.

    Q: Will you support Photon servers?
    A: We do not have plans to host Photon servers originally as then you will be paying 2 costs... One for our servers and then another to have your CCU limited by Photon. We are aware that they support you purchasing large CCU limits and hosting your own, we will look more into this.

    Q: Can I have a local MySQL server?
    A: Yes! We have options available for you to have a MySQL database on the server as well. If you wish to have a remote MySQL server, please feel free to contact us. We will also be expanding Forge Networking to support a local MySQL server out of the box.

    Q: Can I host a simple website on the same server?
    A: Yes! We will have the option to host a simple website on this server as well if you wish for your players to be able to access information or updates about the game. We will be providing hooks for Forge Networking to allow it to pass information to this website for real time webpage updates about your server.

    Q: How do I get started?
    A: Send us an email with "Forge Cloud Beta" in the subject line. NOTE: Currently this beta is only open to Forge Developers.

    Q: How are you guys able to do all of this?
    A: Simple, we have private support and our developers have worked in Networking, cloud hosting, database, websites and various aspects of server development for years. On top of this, we believe we are doing the right thing in wanting to change the current standard model.

    Thank you all so much for your support in making Forge Networking really shine and stand out, we could not have done any of it without supporters like you. Please continue to join in the community, send feedback, feature requests, bug reports, tutorial and documentation requests and most importantly, have fun programming multiplayer games! If there is one thing about networked games it is that it has the special power to bring people together... and there is nothing more powerful than that.

    Edit: I have moved this to it's own dedicated thread if you guys would like to watch it or ask questions about it. :)
     
    Last edited: Jul 11, 2015
    ZJP, tatoforever, CarterG81 and 2 others like this.
  50. davebutlerenator2

    davebutlerenator2

    Joined:
    Nov 8, 2014
    Posts:
    26
    I'm currently looking into networking solutions for my 3rd person multiplayer game. I have a couple questions about Forge's authoritative client-side prediction. I noticed there is a video tutorial explaining how to open/run the client-prediction example project, but it didn't go into much detail about how it was implemented. Also, the clients seemed to be doing a lot of rubberbanding. My questions are as follows -

    1. Is there any way to eliminate the rubberbanding using a Forge authoritative server with client-side prediction?

    2. Would it be possible for me to look at the client-side prediction code before buying?

    Thanks!