Calling all Bolt, Photon, and UNET users!!

As many of you may know Forge Networking is a fast growing multiplayer system offered on the Asset Store and through the Forge Networking portal. You may know us from our fanatical support of this system, and… well we just wanted to take that to the next step. We wanted to start a forum thread to bring all of the network game programmers out there together under one roof to agree on what makes the system that they use amazing. We wish to ask all of you what your favorite part of your particular system is, we wish to know all of these features so we can begin on our newest project, bringing those features to Forge Networking if not already there. We wish to unite the multiplayer (network game) developer community in a way that will enable everyone to develop how they want, with the raw power, performance and advanced feature sets they wish.

The goal of this thread: We wish to hear your feedback on your favorite features in the networking system that you are using and basically how it works for the end user (and internally if you know this part). Even if you are not using the titled systems (Bolt, Photon, and UNET) we wish to hear about your particular system, be it uLink, massivenet or Darkrift.

Why are we doing this?: We love developing Forge Networking and networking systems. We love building a community of like minded developers and a strong positive community that helps each other.

Network games has the unique ability to bring people together from all over the world, share ideas, team them up, challenge them and ultimately connect people in amazing ways. We believe that a product that revolves around the concept of bringing people together should do just that itself, bring developers and like minded people together to share their ideas and sometimes just laugh about random stuff.


Example Reply:

Bolt has a feature where it will build out the game and then run a bunch of clients that connect to that server to test out the connections and other behaviors.

1 Like

Just don’t abandon your product, and then feed your customers shovel’s full of bullcrap promises that your product will be “updated and improved!”

Unlike some others…

4 Likes

I’ll give it a shot! I actually own both Forge and Bolt and am a former user and evangelist of Bolt. In fact, I have used pretty much all the major networking systems on my current project. Started with original Unity (Raknet), to TNet, to Photon, to uLink, to Bolt, to UNet. Two major things hindered almost all of these products: support and features. Ease of use was also a close third. I left the Raknet implementation because of features, TNet was simply too bare bones for my liking and Photon was a nightmare to use and on top of that the CCU costs really scared me for later down the road. uLink was the first lasting and fully implemented system I used. It had more features than you could shake a stick at, ease of use was pretty good and it was tried and tested in big titles. The only problem was, the support was horrendous and after what I heard what happened to Facepunch with Rust (pretty much extortion for support of things that should be fixed to begin with) I was very wary and scared to deal with them. The community was almost non-existent and ALL of my maybe 20 + questions went without a resolution. I found every answer I need by trial and error or by @Yukichu who seemed to be one of the only active members that had a heart big enough to help us others who weren’t as versed. It just didn’t seem to me like they cared at all about their product so I left for Bolt immediately when I saw it had released.

Now a little history on Bolt. I actually knew and loved the author of it from several assets he had made in the past and also his activity on the forums. I learned a LOT from many of his answers on the forum and he was a great guy when it came to having 1 on 1 conversations with him. He to me and I’m sure many others seemed like a ‘networking god’ and the go to guy when it came to networking in Unity. I had used several of his products prior, Lidgren kit, Slimnet, UDPKit - so I was ecstatic when I heard about Bolt. I pretty much bought the asset solely based on the author and what many knew of him at the time. I jumped on board in what I believe was the second version of it, and was the first person in what seems to be a new thing, having a chat channel for developers to converse about the product and its genre :slight_smile: I was very active in the chat and the forums and fell in love with Bolt for its ease of use, feature set and the fact that ALL of the hard stuff I learned how to do myself (authoritative movement, dampening and syncing of mecanim over the network, client side prediction, etc) just worked with no questions asked. The author would have long chats with me, and the others who adopted early, answered all of our questions and was in the chat almost 24 hours a day it seemed at times. Everything was going great, I converted our entire project over in the matter of a few days time and much of the implementations I had done in uLink were improved drastically.

Fast forward some months later, what I believe is the downfall of a good thing. Bolt went on sale on the asset store. You must be saying, why is that a bad thing? Surely the author would get more customers which equals more money and a bigger customer base for support right? Absolutely - but to someone who was so dedicated to support and development of his product - this seemed to be the undoing. In fact I quit the chat myself after the new surge of users. I simply spent too much time in the chat chatting and helping, when I should have been developing. The thing is, I really didn’t care at all that development had stopped and things seemed bleak. Sure it is sad and all and it is understandable that these things happen. But when you disappear and can’t be hassled to take but 5 mins out to post in places what is going on, what to expect etc especially when you have such a large customer base that depends on you, that is inexcusable. It also didn’t help to be led on by false promises and exploits of high personal gains and doings. Just as @AwesomeX_1 stated. wave longtime Bolt user there.

This was the final straw for me. It was not the first time this had happened. Maybe it didn’t happen in the same way or to the same degree but many products we tried and depended on became abandoned or the developer disappeared or simply discontinued it. It is this reason that I have built my own networking solution on top of the UNet LLAPI. I know that every feature / bug is on me and I know the system inside out, so adding or fixing those things is very easy. (usually) Another big thing I learned is that unless you absolutely cannot code something and the system is complex, you should probably just do it yourself. If the time to code it is great though, I would forgo this. I spent a LOT of wasted hours on trying to integrate and make systems work how I needed them to. The initial integration is the easy part, but when those edge cases and or bugs begin creeping in and you haven’t a clue how the system is set up, or it is coded in some fashion you aren’t familiar with or something to this degree, you will end up spending more time trying to integrate, fix, and add on to it then you would just doing the system yourself the way it was envisioned to be. A perfect example of this is UFPS. I worked with it for 1 year during our development. I made it multiplayer well before their Photon kit was out. That thing was a NIGHTMARE to integrate and to change / fix anything was a headache a lot of times you can’t ask the developers because your implementation is so specific. It is a great asset but it is far, far, FAR too complicated for what it offers in my opinion. In early this year, I finally had enough. I sat down for 1 week and coded the entirety of a new custom FPS system that did everything we needed and more. UFPS has so many scripts and you have to jump through so many hoops to find where something is coming from or where it isn’t coming from with their event system and how they store values etc. I think the entire system may have some 100+ classes. My implementation is only 10 classes, and just 2 primary ones, Weapon and Camera. Now when I need to change something, implement something etc, it takes but a few minutes rather than a couple hours to a day or so. I think assets are extremely handy to have, but you really have to learn when and when not to use them. I mainly use them to learn from or I will take bits and pieces of them to add to my system, or form my own system from. If they are just plug and play and forget, then this is the best asset to use.

As for Forge, well it is like I said earlier. Your support right now is absolutely fantastic. I had an issue with the master server and it was solved in a day. I requested a complex feature (commands) and it was added in a day. I also requested the server + client launcher which you are already working on. It was only those features in which I had wanted in the system when I was considering using it. It is some of the best I’ve seen and I own hundreds of assets. The only problem with this is, is well - the same thing happened with Bolt. Whose to say in a month from now some unforeseen circumstance comes up (I hope it doesn’t!) and your entire team has to quit the product. Networking systems aren’t like small time assets that are just ‘done’ and will work forever. They are the backbone to many networked games and a developer who plans to sell their game will have players who depend upon them to fix the bugs / issues with the system when they arise. Does having the source available help with this? Absolutely but as I said before, take for example Bolt. A lot of people don’t know how Bolt works, how to fix it when it breaks or add the features they want and heavily rely on the author to do that. Most people who also view the code of Bolt find it to be in a foreign language in the way it is coded as well as the extreme complexity.

Right now I am using Forge’s master server so I do not have to do that bit myself :slight_smile: If it isn’t featured enough and or there won’t be a feature I need, I can always use it to learn to build my own or add to it. This is where source access is a big deal to a developer like me. But as for the networking. I am going to stick to UNet for now. After using uLink and going to Bolt. I simply cannot go back to using RPCs and Buffered lists. Events and entity states are the way to go in my opinion. (though your implementation and UNets of NetSynced variable is a very appealing alternative) I have adopted it early and I know my circumstance is different from others because I learned so much from my experiences and versed myself well enough in networking to code my own solution. Also some internal people at Unity have been fantastic in helping me as I have uncovered quite a few bugs / and found many areas users such as myself could get confused and misuse something. It will mature with time and I have already seen a great deal of changes in stability with the past 3 months or so I have used it. Also another perk to UNet is that if I need, I can always get Premium Support from Unity. So if I have issues down the road I know dedicated support is just a few meters deep in my wallet away! I also know that if anything happens to that networking I am in trouble, because I will probably be looking for a new engine too!

It’s kind of like the whole debacle on Early Access. There are a lot of amazing games you can find on there but since peoples experiences with the bad eggs weigh so much more heavily, it makes it all that harder to find and or trust the actual good eggs. This is just my 2 cents. Hope it helps.

5 Likes

@Ghosthowl That was an excellent post, thank you very much, we wish you well on your endeavors :smile:

We have heard the request for these events and entity states, would you mind leading us to any specifications or documentation on this :).

:slight_smile: We actively use Forge Networking on our own projects, contracts, and so forth. We are not creating it as some stand alone system to just sell to others, we ourselves have a piece in the pie which is why we also created this thread to gauge what others really liked in other systems. For this reason, even if we were overrun by users as described by @Ghosthowl there is no reason for us to depart from the project. :slight_smile:

Thanks! I wish you well with Forge just the same. I have a feeling things will turn out great with you all compared to all these other networking systems that have popped up in the past year. You’ve gained a lot of steam and have been at this for quite some time.

I think the model for your networking system is in a good state right now actually and entity states can be implemented with the NetSync variable. For events, I would just find a way to remove having ‘buffered’ rpcs all together. From what I have seen there has been a lot of work going on into the buffered lists, but I wasn’t following it all too well. I think in general the RPC and NetSync variables are the way to go in terms of people who want to network games and network them fast. It is the most common approach, easy for people to grasp and has the advantage of basically a 0 learning curve coming from most other networking solutions.

For someone starting out with networking or someone who wants to network a game fast I would recommend Forge as the best pick right now. It could use more video walkthroughs, but the support alone right now is an excellent bet, you can usually just pop into slack ask a question during the hours others are on and get a response. UNet HLAPI is a good second bet, but it severely lacks documentation, any sort of real video tutorials, good examples and you are much less likely to receive the help you need with it. It also is not as ‘high level’ as most users would like to deal with.

Also to you all, if you really want to pick up some users, make a full blown demo project that is fully networked from scratch. Have it be an entire video series to showcase Forge. Such as a ‘Let’s network a Deathmatch FPS’. Doesn’t have to be that, but something that appeals to the masses and does all the networking from scratch to show how easy it is to do, as well as the features Forge has that can make things easier. Perhaps take an asset people can buy on the store and network that or something similar.

Thank you very much :smile:

I would have to agree with this, it has helped a lot of users get their games networked in very short amounts of time. We probably will not remove them, but we will add even more features :slight_smile:

No worries we just created event states, someone helped us on chat, it is now in the system :smile:

This is a fantastic idea, we have a few people that are actually pushing their games through greenlight and adding Forge to them so we will have some pieces soon. We do offer the basic Angry Bots demo out of the box and have some community projects that are being donated as well :). So I think we will have enough show pieces coming out of the woodwork very soon! :smile:

Coming from bolt, these are some things that I loved and am missing in forge:

Commands (I think you know about this)

Compression - being able to assign the number of bits available to each property, to reduce message sizes

Replication modes - set who will replicate a networked variable (Bolt Replication Modes | Photon Engine)

Most of all though, I like the way bolt completely manages the lifetime of networked objects. Clients joining will synchronize exactly the same networked objects as the server, and automatically destroy them when disconnected. I would suggest separating network instantiates from RPCs - clearing the RPC buffer list should not affect buffered networked instantiates. Non-buffered network instantiates and targeted instantiates are unnecessary, we can use rpc calls and local instantiates for those. It should be simple - whatever’s on the server gets synced to the clients, same as netsync properties.

I just published a network package today called Cross.Net you may want to have a look at that also. You can find a link to my forum in my signature.

Gah! You’re trying to steal my thriving DarkRift community! :wink:

Haha, not really :slight_smile: you can use this thread to gauge what people want as well :smile:

1 Like

We are now analyzing the commands document :slight_smile:

Will analyze how we can make use of this. Currently this is available in the hands of the user to use data types that fit with what they are doing, such as using a byte or ushort over just int. We will definitely start making an analysis on this topic though :slight_smile:

Fascinating, currently the owner is in control of this. So this would give more control to allow non-owners of an object to manipulate the replication?

So in this suggestion you would request that the RPC buffer is separated to the standard buffer and then instantiate buffers? Currently we manage the buffer so that if a network object is destroyed then its controlled objects as well as its buffered substantiation is removed from the buffer.

Interesting, currently you can segment out the buffered RPC so that you buffer a localized instantiate. I will examine this logic further to see where we can optimize to suit these needs :slight_smile:

Hi everyone, we actually got TONS of feature requests from our chat and in private messages. We would like to share a few of the ones we implemented just so that we can “knowledge share” with the other guys.

We have implemented events that fire on AOI so that everyone can run logic for when objects come in and out of a scene. We also implemented remote objects, this is a way of spawning different objects as a “view” for other players but keeping the standard player object for “my” own. We have a drag and drop chat now thanks to digict and his suggestion (was going to put an @Dragon-Magic-Studio but not sure if that is the same person XDD, sorry if not). We added a replicated idea of the “Bolt event” known as Forge Transport Objects. Independent update methods for owners and non-owners so that “IsOwner” checks are not scattered everywhere.

For those of you wondering… yes, every single one of the things listed here were added into the Forge Networking system since I started this thread 2 days ago ;). Thank you all so very much for your support. Please keep the suggestions coming and we’ll keep the updates coming!

1 Like

Yes its the same person, did not really post before on unity itself.
I also thank you guys to pick this idea up and implement it so all forge users can now enjoy it :smile: