Search Unity

  1. Welcome to the Unity Forums! Please take the time to read our Code of Conduct to familiarize yourself with the forum rules and how to post constructively.
  2. We have updated the language to the Editor Terms based on feedback from our employees and community. Learn more.
    Dismiss Notice
  3. Join us on November 16th, 2023, between 1 pm and 9 pm CET for Ask the Experts Online on Discord and on Unity Discussions.
    Dismiss Notice

[NO CCU LIMIT] Forge Networking now OPEN SOURCE

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

  1. Brent_Farris

    Brent_Farris

    Joined:
    Jul 13, 2012
    Posts:
    881
    I am very sorry about the late reply @shamunity @Cranick was hit by some pretty heavy deadlines and missed this reply.

    This all depends on how your code is structured. When you write networking code you will need to define what variables are needing to be sent across the network, when, what functions need to fire and so forth. Often this will require you to change some of your pre-existing code, we always recommend making a backup before injecting networking into a current project. You can either make the networking scripts as a plugin (outside of your code) or directly embedded, it truly is up to your design. If you are going to make them as a plugin (outside of your code) then you will need to expose the variables or pass the variables into your networking layer to be sent :)

    We don't have a tutorial for this exact scenario, but we do have a lot of tutorials which will give you a feel for the code and how it is designed here: http://developers.forgepowered.com/Tutorials

    Please let us know if you have any further questions! :D
     
  2. Brent_Farris

    Brent_Farris

    Joined:
    Jul 13, 2012
    Posts:
    881
    Hello there @Exeneva ! :D I am very sorry for the late reply.

    So we are actually re-writing our TCP layer, UDP is the primary protocol for the majority of games not hosted through a web browser so we wanted to take the chance to make TCP better. You can actually write everything in UDP and then switch the switch to turn it to TCP in the end. What our library does is create a set of protocols and systems on our networking layer to expose and make sending messages seamless with Unity in general. You do not have to follow any strict formats and we have tons of ways of sending data. In fact we don't enforce any set standard, we actually only create our own header (somewhere around 1-32 bytes). You can send data however you like and reliably (or unreliably if UDP) receive it on the other end.

    If you already have a system for serializing objects into bytes, that is all you need to get started with Forge. We handle the bytes beyond that point. What Forge also sports is a ton of helpers that do a lot of common tasks for you, such as translating positions, rotations, and interpolations. If you wish to do this yourself, you can easily turn off those features as well :).

    Please let us know if you have any further questions
     
  3. Brent_Farris

    Brent_Farris

    Joined:
    Jul 13, 2012
    Posts:
    881
    The question really isn't if Forge can handle an MMO. We are built to scale, unlike other popular solutions who often limit you to 8-12 players. If you have the machine power and the network bandwidth you can have as many clients as you wish on one server, we limit nothing and all of our internal messages fit within 1 packet. We have done simple connection tests with our demo scenes on powerful servers with 128 players connecting. We often get asked if Forge can support high scale, our answer is yes. As I mentioned earlier, it really is up to the machines that you can afford to run these large scale environments :)

    Please let us know if you have any further questions :D
     
  4. DaGround

    DaGround

    Joined:
    May 26, 2014
    Posts:
    16
    Hi, i just bought Forge Networking after following your guys since beta :)

    but i have some difficulties to register on your homepage to confirm my purchase. The registration doesnt work for me and i cant login with the entered login-details. Registration on epicjoin worked flawlessley..

    Please help :)
     
  5. Brent_Farris

    Brent_Farris

    Joined:
    Jul 13, 2012
    Posts:
    881
    Hi there! I am very sorry for any issues that we are having with the registration on the Forge site. Do you mind sending an email to us (support@beardedmangames.com) with the username/email you used? I would like to look through the data on the site to see what might have gone wrong.

    Also thanks for supporting us for so long! We are very grateful and can't wait for you to see all of the new features and improvements! :D
     
  6. Dennis59

    Dennis59

    Joined:
    Jan 8, 2013
    Posts:
    66
    Hi, I have purchased Forge Networking and would like to join the Slack channel. How can I do this?
     
  7. Cranick

    Cranick

    Joined:
    Nov 20, 2011
    Posts:
    310
    You automatically get added to the slack chat when you register on our website with your invoice.

    http://developers.forgepowered.com/Profile

    Please check your spam folder in case it got sent to there. :)
     
  8. Dennis59

    Dennis59

    Joined:
    Jan 8, 2013
    Posts:
    66
    Cranick, thanks for the reply. Unfortunately email was one of the casualties of upgrading to Windows 10 and that email no longer exists. I can post a request on EpicJoin to request that email be resent.

    Thanks again.
     
  9. Cranick

    Cranick

    Joined:
    Nov 20, 2011
    Posts:
    310
    Responded to your email. :)
     
  10. silentneedle

    silentneedle

    Joined:
    Mar 14, 2013
    Posts:
    280
  11. Brent_Farris

    Brent_Farris

    Joined:
    Jul 13, 2012
    Posts:
    881
    We offer multiple sockets per instance. That means you can create a Peer-2-Peer P2P style connection if you wish. You can also create a distributed server network if you wish to. This allows you to do things like create an "infinitely" large server where servers communicate your player data to one another. :)
     
    silentneedle likes this.
  12. Teila

    Teila

    Joined:
    Jan 13, 2013
    Posts:
    6,929
    Thank you, Cranick! :) I was about to beg you to help him as he is my programmer. But looks like you took care of it. Great support as usual.
     
    Cranick likes this.
  13. FisherM

    FisherM

    Joined:
    Dec 28, 2013
    Posts:
    366
    Hey, purchased forge last month.
    I want to completely serialize a class and send it over the net.
    WriteCustom would be nice because the
    Code (CSharp):
    1. socket.AddCustomDataReadEvent ("CLIENTS_JOINED", delegate {
    2.             Debug.Log ("Server sent out that it is ready");
    3.         });
    Way of writing it is really useful but it seems like I am forced to use WriteRaw.

    Could you maybe explain the usage of write raw?
    can you specify a NetworkingPlayer?
     
  14. Vancete

    Vancete

    Joined:
    May 3, 2010
    Posts:
    198
    Hi

    I'm planning to develop a multiplayer game and I need a persistant server, like in MMO that:
    -Runs standalone, preferible in console mode, it wont be create player prefabs.
    -The server will be online always, storing all the prefabs instantiated.
    -If possible, the server will run the scripts of that prefabs even if there's no one player connected.

    Can you give me tips or a little guide for that?

    Thanks
     
  15. Brent_Farris

    Brent_Farris

    Joined:
    Jul 13, 2012
    Posts:
    881
    Yes, we do not have this right out of the box as the platform is developed in a server architecture, however we have had some users create such a thing. Basically the clients that would be next in line for mitigation would keep the replicated (sever exclusive or not) data in their memory so that if the host dropped they would move to this host. Since we support multiple sockets this is a pretty painless process.

    If the demand is high enough we can add such a thing into the system by default :)

    I would like to note that we have announced Forge Cloud which has new tech that removes the need for host mitigation as other cloud providers push it.
     
  16. Brent_Farris

    Brent_Farris

    Joined:
    Jul 13, 2012
    Posts:
    881
    Hi there! :D Thanks for supporting Forge. Do you have access to our slack live chat and wiki from the site yet? We may have some people you can talk to or some tutorials we can send your way. Also you can get the latest version 16.8 through the website. :)
     
  17. Brent_Farris

    Brent_Farris

    Joined:
    Jul 13, 2012
    Posts:
    881
    Announcements!
    The Forge team has been super hard at work and we are ready to start blasting some of the great new things! We want to be as transparent as possible and we wish for all of your great feedback.

    Forge Complete Documentation
    November is our documentation month. We have officially decided to document every public function, every action, every event every thing inside of Forge Networking. Our team believes that knowledge is power and a well informed user can take full advantage of what Forge has to offer. Look out for all of our great new tutorials to come in November!

    Forge Networking GitHub Access
    Announcing Forge Networking GitHub access. Now, as an owner of Forge Networking, you can have access to the Forge Networking repository! If you want to add a feature, fix a bug, make comments or do whatever you now can! Just ask for GitHub access in a private message (preferably on Slack), fork the read-only repo, modify or extend the code and then do a Pull Request!! :D Be an early adopter and play a role in Forge becoming the #1 networking solution on the market.

    Forge Cloud
    What on earth? Isn't the Forge Cloud dead? I haven't heard anything on that in months! Guess what, we are back! We have invented tons of new technology to support our Forge Cloud platform and now we are going into our on-demand beta! See how the power of Forge Networking will give you the power, without CCU limitation and no restrictions! Check out this old post to learn more, we will update it soon!

    Forge Free
    Are you a skeptic? Too many other networking solutions failed you with high promises? Other networking systems cost too much or bringing you down? Well, we have announced that we will be releasing a FREE version of Forge, now you can evaluate to your hearts content and see why everyone has been using Forge! Forge FREE is free to use and test, please see this post for more information and feedback.
     
  18. FisherM

    FisherM

    Joined:
    Dec 28, 2013
    Posts:
    366
    Thanks, I don't have access to any chat but I did manage to solve that particular issue.

    I am actually getting the following now
    Code (CSharp):
    1. Parameter name: key
    2. at System.Collections.Generic.Dictionary`2[BeardedManStudios.Network.NetworkingPlayer,System.Collections.Generic.Dictionary`2[System.UInt32,System.Collections.Generic.Dictionary`2[System.Int32,System.Collections.Generic.KeyValuePair`2[System.DateTime,BeardedManStudios.Network.CrossPlatformUDP+Header[]]]]].get_Item (BeardedManStudios.Network.NetworkingPlayer key) [0x0000b] in /Users/builduser/buildslave/mono-runtime-and-classlibs/build/mcs/class/corlib/System.Collections.Generic/Dictionary.cs:136
    3. at BeardedManStudios.Network.CrossPlatformUDP.ReadMessageFromPlayer (System.String endpoint, BeardedManStudios.Network.Header header, BeardedManStudios.Network.NetworkingPlayer sender, System.Collections.Generic.Dictionary`2& target, BeardedManStudios.Network.NetworkingStream stream) [0x0000d] in D:\projects\unity projects\3d\Turn of War\Assets\Bearded Man Studios Inc\Forge Networking\MainScripts\Core\CrossPlatformUDP.cs:1385
    4. at BeardedManStudios.Network.CrossPlatformUDP.PacketReceived (System.String endpoint, BeardedManStudios.Network.BMSByte bytes) [0x00685] in D:\projects\unity projects\3d\Turn of War\Assets\Bearded Man Studios Inc\Forge Networking\MainScripts\Core\CrossPlatformUDP.cs:1708
    5. at BeardedManStudios.Network.CrossPlatformUDP.ReadAsync (System.Object eventSender, System.ComponentModel.DoWorkEventArgs e) [0x0014c] in D:\projects\unity projects\3d\Turn of War\Assets\Bearded Man Studios Inc\Forge Networking\MainScripts\Core\CrossPlatformUDP.cs:1774 out of sync
    6. at System.Collections.Generic.Dictionary`2+Enumerator[System.String,BeardedManStudios.Network.NetworkingPlayer].VerifyState () [0x00028] in /Users/builduser/buildslave/mono-runtime-and-classlibs/build/mcs/class/corlib/System.Collections.Generic/Dictionary.cs:912
    7. at System.Collections.Generic.Dictionary`2+Enumerator[System.String,BeardedManStudios.Network.NetworkingPlayer].MoveNext () [0x00000] in /Users/builduser/buildslave/mono-runtime-and-classlibs/build/mcs/class/corlib/System.Collections.Generic/Dictionary.cs:835
    8. at BeardedManStudios.Network.CrossPlatformUDP.PacketReceived (System.String endpoint, BeardedManStudios.Network.BMSByte bytes) [0x005a2] in D:\projects\unity projects\3d\Turn of War\Assets\Bearded Man Studios Inc\Forge Networking\MainScripts\Core\CrossPlatformUDP.cs:1660
    9. at BeardedManStudios.Network.CrossPlatformUDP.ReadAsync (System.Object eventSender, System.ComponentModel.DoWorkEventArgs e) [0x0014c] in D:\projects\unity projects\3d\Turn of War\Assets\Bearded Man Studios Inc\Forge Networking\MainScripts\Core\CrossPlatformUDP.cs:1774 out of sync
    10. at System.Collections.Generic.Dictionary`2+Enumerator[System.String,BeardedManStudios.Network.NetworkingPlayer].VerifyState () [0x00028] in /Users/builduser/buildslave/mono-runtime-and-classlibs/build/mcs/class/corlib/System.Collections.Generic/Dictionary.cs:912
    11. at System.Collections.Generic.Dictionary`2+Enumerator[System.String,BeardedManStudios.Network.NetworkingPlayer].MoveNext () [0x00000] in /Users/builduser/buildslave/mono-runtime-and-classlibs/build/mcs/class/corlib/System.Collections.Generic/Dictionary.cs:835
    12. at BeardedManStudios.Network.CrossPlatformUDP.PacketReceived (System.String endpoint, BeardedManStudios.Network.BMSByte bytes) [0x005a2] in D:\projects\unity projects\3d\Turn of War\Assets\Bearded Man Studios Inc\Forge Networking\MainScripts\Core\CrossPlatformUDP.cs:1660
    13. at BeardedManStudios.Network.CrossPlatformUDP.ReadAsync (System.Object eventSender, System.ComponentModel.DoWorkEventArgs e) [0x0014c] in D:\projects\unity projects\3d\Turn of War\Assets\Bearded Man Studios Inc\Forge Networking\MainScripts\Core\CrossPlatformUDP.cs:1774
     
  19. Brent_Farris

    Brent_Farris

    Joined:
    Jul 13, 2012
    Posts:
    881
    Oh? The access should have been sent when you registered on the website. Are you using the latest version 16.8?
     
  20. VNTIS

    VNTIS

    Joined:
    Mar 24, 2014
    Posts:
    92
  21. FisherM

    FisherM

    Joined:
    Dec 28, 2013
    Posts:
    366
    Sorted that error, word to the wise, in a state that registers a readcustom and sends a writecustom on the server, use a cooroutine to delay it briefly
     
  22. derkoi

    derkoi

    Joined:
    Jul 3, 2012
    Posts:
    2,237
    Hi, I just upgraded to the latest version (16.8), downloaded from your website. I opened up the quick start menu scene to change the game scene and noticed this, not sure if it's ok, doesn't look it but I'm far from an expert. :)

     
  23. FisherM

    FisherM

    Joined:
    Dec 28, 2013
    Posts:
    366
    Host 127.0.0.1
    Scene Name name of scene you want to load
    Server Browser Scene name of scene with the StartGame inside it
     
  24. derkoi

    derkoi

    Joined:
    Jul 3, 2012
    Posts:
    2,237
    Yes I know that but it's not normally filled in with the values in the image. I wasn't sure if there was perhaps a bigger issue, perhaps an import issue.
     
  25. Unreal-Vision

    Unreal-Vision

    Joined:
    May 6, 2013
    Posts:
    58
    Ehi guys,

    I have two stupid questions:

    1) We are developing a Steam and console MMO game ... You plan to support Console in the future? it is very important for us.
    2) What is the main advantages compared to uLink?

    Thanks
     
  26. brisingre

    brisingre

    Joined:
    Nov 8, 2009
    Posts:
    277
    Hey, quick question:

    How do you send an RPC to a specific player?

    Thanks!
    -Lou
     
  27. Brent_Farris

    Brent_Farris

    Joined:
    Jul 13, 2012
    Posts:
    881
    Hello @Unreal Vision :D

    We are working with a few people working with Forge that have console licenses but we have yet to get their feedback on if .NET sockets are supported on consoles. If so then it should work fine. We do not have a license ourselves but it is a major goal of ours to support consoles and are willing to work with anyone who have console licenses to find out what we need (if any) to support them.

    I do not have an exact comparison with uLink but if you would like, you can request Slack access via our email (support@beardedmangames.com) and we can invite you to evaluate the community. I am sure that they can give you a fair comparison :).
     
  28. Brent_Farris

    Brent_Farris

    Joined:
    Jul 13, 2012
    Posts:
    881
    Hey! :D Check out AuthoritativeRPC which allows you to target a player. :)
     
    brisingre likes this.
  29. brisingre

    brisingre

    Joined:
    Nov 8, 2009
    Posts:
    277
  30. Paradoks

    Paradoks

    Joined:
    Oct 13, 2009
    Posts:
    436
    Can forge be installed on a EC2 instance for server side logic out of the box ?
    EDIT: just saw the headless linux server tutorial, looks good.
    When will you make the EC2 tutorial too ?
    When do you plane to release the webGL export ?
     
    Last edited: Nov 17, 2015
  31. derkoi

    derkoi

    Joined:
    Jul 3, 2012
    Posts:
    2,237
    I had a discussion regarding using TNet on PS4 before I started using Forge on the Devnet forums. Basically Tim Cannell from Unity said this:

    This was back in March and things change, so I think it's safe to assume that if it doesn't work it will be made to work.
     
  32. ZoneOfTanks

    ZoneOfTanks

    Joined:
    Aug 10, 2014
    Posts:
    128
    Maybe a noobish question, but I need to be sure. Can I synchronize authoritative movement if on server I use simplified mesh and full mesh on client? Size of models the same. Is it possible with this asset? :) Seems to be good network solution anyway ;)
     
  33. mohydineName

    mohydineName

    Joined:
    Aug 30, 2009
    Posts:
    301
    Hi all,

    I purchased Forge for its performances in Multithreading.

    However I am quite surprised that the MainThreadManager takes 8ms on a Galaxy S6 to run every 6 frames. This is not good enough for the GearVR so I am wondering if you had a way to tune it down? Note also that its GC is 26KB, which becomes a killer as well. Using tested version 16.4.
     
  34. derkoi

    derkoi

    Joined:
    Jul 3, 2012
    Posts:
    2,237
    Nevermind, I found the fix on your Slack channel.

    For anyone having the issue below, In line 755 and 762 of NetWorker.cs replace with MaxConnections = maxConnections;

    ==== Original issue =====

    Hi, I just upgraded to v17.01 and when I try to connect to another to a local game I get the following error even though the player limit is 31.

    I've tried changing the player limit but it makes no difference.
     
    Last edited: Nov 17, 2015
  35. ZoneOfTanks

    ZoneOfTanks

    Joined:
    Aug 10, 2014
    Posts:
    128
    Hmmm... it seems like this asset has a lot of bugs. Is it ready for production? :rolleyes:
     
  36. dreb4o

    dreb4o

    Joined:
    Mar 29, 2015
    Posts:
    51
    I'm not very smart and do not understand. why should I buy this product
    Watch the video did not show anything there
    this product is not combined with other and nobody says that tried(UFPS,Adventure Creator,Inventory Pro and many others)
    if there is someone who has made a multiplayer game with this product
    to say the name of the game
     
  37. Brent_Farris

    Brent_Farris

    Joined:
    Jul 13, 2012
    Posts:
    881
    The MainThreadManager waits for Unity, the fact is that your game is taking that long between updates. You can do everything on Forge (not related to unity) on a separate thread, and in fact it is. The only thing that is offloaded to the main thread is the RPC call which we are going to make an alternative that does not get offloaded to the main thread. I would like to point out that no Unity behaviors (such as updating UI or transforms) are allowed to be changed on anything other than the main thread. So just to reiterate, Forge is not taking that much time to work, it is Unity and how your game is setup. If you want to reduce the amount of time it takes for the MainThreadManager executions, you will need to optimize any game code that could be slowing down the standard Unity update loop.
     
  38. Brent_Farris

    Brent_Farris

    Joined:
    Jul 13, 2012
    Posts:
    881
    Yes, this can all be handled through the various systems we offer for communicating the data you need. We also have easy helpers that automatically synchronize things like position, rotation and scale :)
     
  39. Brent_Farris

    Brent_Farris

    Joined:
    Jul 13, 2012
    Posts:
    881
    We have a lot of developers on Forge and we always have 2 versions. One version is the most tested version which is the most stable, and the second (the ones where bugs often get reported on) is the latest, newest version. If you are not in the position to where you can try new features with the chance of bugs, you will want to use the most tested version rather than the newest version.
     
  40. Brent_Farris

    Brent_Farris

    Joined:
    Jul 13, 2012
    Posts:
    881
    Hi there! The product is new (released this year) and so we will not have a massive "games made using this" list. However I can say we currently have hundreds of games being developed with Forge right now :). We will start to see a flood of games, big and small, in due time. Most all of the developers on Forge have come from the other networking systems, check out the reviews to see. With new products, its not about seeing what games are already out on it, it is about why people are leaving everything else and sticking to Forge or standing by its development :).
     
  41. VNTIS

    VNTIS

    Joined:
    Mar 24, 2014
    Posts:
    92
  42. ZoneOfTanks

    ZoneOfTanks

    Joined:
    Aug 10, 2014
    Posts:
    128
    Clear, many thanks :) I'll try this asset, keep going!
     
  43. Brent_Farris

    Brent_Farris

    Joined:
    Jul 13, 2012
    Posts:
    881
    Sorry I missed this @VNTIS

    I will need to review this product in order to give a good evaluation. If you can get the protocols that they use for it then it can be supported. As of right now the Forge Networking protocol would have to be added to this system (how headers for traffic is generated internally).
     
  44. james69lemon

    james69lemon

    Joined:
    Nov 24, 2013
    Posts:
    6
    Everything I'm reading about forge sounds awesome so far. Just wondering, if I use Forge to implement a server-is-client model, how will the users be able to find eachother? Will I still be able to use a master server list? @farrisarts

    Thanks!
     
  45. Brent_Farris

    Brent_Farris

    Joined:
    Jul 13, 2012
    Posts:
    881
    Yes, a lot of our tutorials show the "server-is-client" model and the Master Server was validated to work with this model as well :). The networking layer is separated from the standard gameplay model so it makes it really easy to implement all of the features for the server even if it is acting as a client.
     
  46. vinzer_x

    vinzer_x

    Joined:
    Apr 2, 2013
    Posts:
    7
    Hi, I'd like to mimic the network functionality of Spaceteam, so I'm interested in your plugin. Is it possible to have a phone act as a hotspot and be a player as well? I checked out UNET and ran into problems where the hotspot/host player infrequently sends packets to other phones connected to its wifi hotspot.

    If possible, it would also be helpful if you have a demo APK handy showing the network discovery prowess of your plugin so I can see it in action.

    Looking forward to your response, and hopefully purchasing your plugin. Thanks! :)
     
  47. GXMark

    GXMark

    Joined:
    Oct 13, 2012
    Posts:
    501
    If you have a huge fat client that builds to a large size it can be very unsavory to have to upload a large server to the host. Can Forge seperate its model into a client unity build and a server unity build. I did try it but noticed that all the RPC calls lost their calling order. Is there a particular rule to enable this kinda project workflow?
     
  48. blueagardq13

    blueagardq13

    Joined:
    Nov 6, 2012
    Posts:
    9
    Hey, I been having a problem with forge as to when I load the the Scene that I am supposed to after I ran the connection, but after I load the scene I want and connection is fine... I want to load another Level, but everytime I do the build just stops responding. Like when I try to run it it stops working for some odd reason. I even limited it to one object in the scene.

    I just dont know whats the issue please help
     
  49. Brent_Farris

    Brent_Farris

    Joined:
    Jul 13, 2012
    Posts:
    881
    We will need to test the case of the device acting as a hotspot as well as a server/client. This should be fine as long as all the devices are assigned unique IP addresses via the hotspot (will need to research phone hotspot tech to know for sure).
     
  50. Brent_Farris

    Brent_Farris

    Joined:
    Jul 13, 2012
    Posts:
    881
    When you are using #Preprocessor statements, you will want to make sure that you are not removing the method signatures for the RPC functions. You can do this by just removing the body of the function with the preprocessor.