A Unity ID allows you to buy and/or subscribe to Unity products and services, shop in the Asset Store and participate
in the Unity community.
Discussion in 'Connected Games' started by vis2k, Aug 11, 2016.
Yes, that's doable. Mirror is server authoritative by default.
I'll be working on it and testing intensely throughout the week. It's likely to have problems in its current state, but it's a start.
Questions for the more learned:
I wanted a way to be able to unregister events for cleaner shutdown, so in the root MirrorpunchSteam I set Action variables to lambda expressions so I could do so. Are there any issues with this approach?
How does the NetworkManager handle connection ids, if I'm assigning them in the transport. Is it fairly agnostic to how it routes data associated with connection ids?
thanks for the reply. Does mirror also support matchmaking and room creation?
there is a way co connect with another project to a main project network? I wold like to create two different unity projects that use a thirf project as server for sharing data.
could this be possible with mirror?
Could you please point me into the right direction?
Latest showcase: Rogue Star Rescue - a roguelike tower defense game made with Mirror!
It's not in Mirror by default, but you can do that with Mirror.
We recommend using one project for everything. That's what Mirror was for after all.
I know that but I need to control some parameters by a different device, and is impossible to make that project work on a very different device.
So it's impossible to make connect two different projects?
If I use LLAPI to create a custom socket, do Mirror could have any trouble?
Not 100% sure what you mean. Perhaps our Multiplex transport is useful for you.
Hello - I need to send a collection of structs or classes to a client using TargetRPC. The data is just a string and an int. I am currently planning on doing this as follows:
void TargetSendData(NetworkConnection conn, List<MyThing> data)
// do stuff with data
My question - Is this the best way to do this in regards to network performance and bandwidth? Should I use a struct instead of a class? Possibly a different type of collection vs List?
This is not something that will be called repeatedly but I'd still like to keep it as performant as possible.
New Feature: SyncToOwner. Each component can be configured to sync to all observers, or only to owner. This will save large amounts of bandwidth for components like a player inventory, that shouldn't be synced to anyone else. Enjoy!
You can't send Lists in Rpcs. Only simple types like int, string, bool, int, string, etc. and structs like SomeStruct, SomeStruct, and so on. In your case, simply send an Array and make sure that it's a struct.
Hi Does Mirror supports NAT punch through? Also, does it support console platforms? Has anyone shipped a game using mirror on console platforms? Or attempted?
Check out mirror-networking.com for our showcase.
Mirror doesn't really care what platform you use it for, they all work.
Check out our UDP transports, I think a few of them might be able to support nat punchthrough.
New Feature: Custom readers and writers.
Since the dawn of time, HLAPI and Mirror have only been able to deal with a limited number of data types. Simple things like passing a DateTime or Uri as parameters in your [Command], [Rpc] or [SyncVar] would give you an error.
Starting with version 3.17.2 available at https://github.com/vis2k/Mirror/releases, you can extend Mirror and add support for any type you desire. All you need to do do is add extension methods for NetworkReader and NetworkWriters. For example:
public static class DateTimeReaderWriter
public static void WriteDateTime(this NetworkWriter writer, DateTime dateTime)
public static DateTime ReadDateTime(this NetworkReader reader)
return new DateTime(reader.ReadInt64());
There is no reflection involved. The weaver will find your extensions and use them just as if you were writing the code by hand, there is no performance penalty at all. Thanks to @vis2k for keeping me honest and help me find the simplest way to achieve this feature.
Hi, with mirror what are my options of sending RPC to specific clients?
You use a [TargetRpc] for that. The first parameter is the connection to the client you want to call. See here for docs: https://mirror-networking.com/xmldo...unications/RemoteActions.html#targetrpc-calls
Hello - I noticed in some of the comments that you have removed a lot of linq code for performance reasons. Can you talk a bit about this? I was not aware that using linq is a performance hit, and a quick google search seems to indicate that it is not. I'm just curious.
A lot of the Linq functions cause allocations which are pretty performance heavy and can cause big spikes on CPU. You can observe this in the "GC Allocs" column in the Profiler.
Is there a way to get the connected users before connecting to a server? I want to make something like a server list.
Check out our list server: https://mirror-networking.com/list-server/
Hello and thanks for the info. Another question - what about using Async and Await? Is this frowned upon for the same reasons? I seem to recall you guys ditching these functions too. Should I use Coroutines over asyncs?
Async/await is common thing to use in C#. Unity's mono backend however seems to have serious performance issues with that. None of the async/await transports that we tried managed to scale past 100 CCU. It's so slow in Unity that we end up with 120 second latencies.
If you use a few async/await calls for non-transport stuff then that's probably fine of course.
Hi, I can connect clientB to HostA with Mirror, but only in LAN.
Usually if that happens the issue is that the port is not open/forwarded properly on the modem, but I believe that's not the case: from a unix server somewhere out there in Europe, I "telnet <mywanip> 7777" and telnet connects, ONLY if my HostA is running and listening to 7777, otherwise the connection fails. I believe that proves that I can access hostA through port 7777 from the net, so port is open and properly forwarded.
Since I'm not a networking expert.... that's pretty much where I grind to a halt.
hostA listening on port 7777 - clientB connecting to 192.168.1.33 port 7777 (LAN) - WORKS
hostA listening on port 7777 - clientB connecting to 3220.127.116.11 port 7777 (WAN) - DOES NOT CONNECT
hostA listening on port 7777 - remote server running "telnet 318.104.22.168 7777" CONNECTS (obviously nothing happens but it connects)
hostA NOT listening on port 7777 - remote server running "telnet 322.214.171.124 7777" does NOT connect (proving that in the case above hostAort are reachable from the net)
We usually recommend hosting on Namecheap.com (not because they are the best, but it works without configuration), or Google Cloud (you do need to open firewall ports there though).
Different hosters might require different configurations.
Showcase: Project Cybertronic
Previously developed with UNET, now powered by Mirror!
Check out their website: https://cybertronic.red/
Ok upgraded from 1095 to latest. Got some problems:
Cannot convert from Mirror.StringMessage to byte
Whats changed? Having trouble finding the documentation on this update.
can mirror be used to remotly control a main camera
aka Main Host is full screen window that shows a scene and it lanches (via button or key press) another window (threaded application call) that renders a lesser version of same scene (less graphic quality) that when the camera (orbit control) is moved this changes the camera in the main full screen parent window to match. like a remote control view sub window thingy
just want to know if this is posible (before i start alot of reading and codeing the parts etc.)
Please post the exact error
That was the exact error! Don't worry its fixed. Can I suggest though. Stuff like these little network manager changes break existing projects. I hope that changing the AddPlayer from stringmessages to bytes is REALLY REALLY worth it. The great thing about Mirror is that you import it and are not greeted by a sea of red. Important to keep it that way as much as possible IMHO
We try to keep it this way, unless where completely necessary. E.g. in that case above.
I'm thinking about a mobile game
based on a room for 4 player.
Making them P2P doesn't seem like a good choice.
So I think I need to manage the server by myself.
When the player to create room, the master server to run a server process.
so it's dynamic create server process in each room.
It's basically the function of Master Server Framework, the Asset.
But this Asset doesn't seem to support mirror.
Is there any alternative?
Hi ! I'm a total noob in networking. I'm looking for basics tutorial on how to use Mirror on a unity project. I want to create some LAN multiplayer project (with no internet). Can you point me some good tutorial ? That would be super appreciated
There's not a lot of Mirror tutorials because Mirror is basically Unet and there are lots of Unet tutorials made over the years.
officialy what's the unity solution HLAPI already drepreced too like unet ?
See all the sticky threads in this forum. The official Unity solution is currently under development, though there is alpha code released for you to preview, as well as alpha quality documentation.
i want say lol
Seems Mirror dont have lan matchmaking, I think it will be very useful to provide a lan matchmaking feature for developer.
Hi there! I'm interested in Mirror which could replace the UNet! I tried to install it but found a big problem. When adding component like NetworkManager, NetworkIdentity, it was fine but when I tried to make a script importing Mirror and using NetworkBehaviour, 2 kinds of error happens. How should I fix this bug?
Someone sent us a pull request already: https://github.com/vis2k/Mirror/pull/1024
We are still considering it. Feel free to try and let us know if it works for you.
Looks like you didn't import it properly. Go to the Unity Asset Store, search for 'Mirror', get it from there, try to extend our examples.
Another issue is ,when I attach unity using vs first, and then start editor. the editor will freeze even I dont set any breakpoint on it. This editor freeze always happen when attaching the editor
My unity is 2018.4.4f1 and vs 2017.
Hello to all! I want to make registration and login for Lan. Username and password will be stored in the local server. How can I use Mirror to do that? Thank you.
I'm starting a new project and this will be my first game with multiplayer. I've recently been wading through all the multiplayer options and Mirror looks like the path I need to take.
My game will feature lobbies of 10-20 players and projected playerbase in the 3-5k range monthly. But who knows it could take off even bigger.
For my scalable cloud servers, I've checked out Amazon AWS and it seems pricey for an indie. Is there a better alternative? I found 2 others that seem to offer a similar service, the first being Hostwinds.com and the other Vultr.com.
Anyone's thoughts and recommendations would be appreciated.
With the cloud services you're paying a premium for convenience and redundancy. Spending a while looking for the best deal in price to the resources you get, it is pretty clear the best deal is if you rent somewhat outdated dedicated servers. For example, for my game I pay $65/mo for 16 cores of Opteron 4284, 32 GB RAM, 2TB HDD storage, and 25TB data transfer. If you used a similar amount of resources from AWS the cost would be considerably higher ($1k maybe?). Check out Joe's Datacenter (no affiliation with myself other than being a customer, regardless of my username).
The big negatives are you are unlikely to fully utilize all the available resources of a dedicated server every month, and a dedicated server is more prone to going down for a hardware failure than a cloud virtual server, since cloud servers can be moved between physical hardware as needed seamlessly. But depending on your game, renting multiple dedicated servers may actually save you a considerable amount of money than going the cloud route. YMMV
@Joe-Censored you confirmed part of what I was thinking by going the mirror route. The dedicated server you have, how many players could you reasonably expect to support. For instance, say you have a 16 player game, how many instances would it support so I could guesstimate how many servers I would need depending on game sales/popularity. That seems to be part of the factor as to why people are going balance loaded cloud servers these days. Not to mention the dependability/redundancy you already mentioned.
Adding multiplayer definitely magnifies the issues compared to singleplayer.
That's a very difficult question to answer, as it depends entirely on your game. A card game or simple turn based game for example, you might be able to support thousands of users. A very high speed game requiring lots of CPU or memory resources though might bottleneck you there with relatively small numbers of users before network usage even matters though. Run your server instance on your home machine in headless mode and look at its resource usage to get an approximation for how many of it you can run on your server.
You could also consider using dedicated servers for your expected capacity needs, and spinning up cloud servers as needed when demand exceeds capacity.
Thanks for the insight!
Is there a quick Relieable UDP solution in mirror?
There are a bunch of different transports for Mirror, including two that are UDP-based.
The mirror profiler is now available to all our patreons
You can easily find out what objects are sending what messages and tune your bandwidth utilization.
Read the documentation for instructions as well as suggestions for improving your game.
Some key features:
Simple and intuitive, just open it and press record
Inbound and outbound messages, even your own messages
Sort the messages by any field
Shows chart by message count or by total bytes
Zero overhead if you are not using the profiler
It can save and load profile data
Show all frames or only frames with messages
Displays name of your commands and rpcs
Displays the object that sent the command, rpc, syncvar or being spawned
Is here any Playmaker actions available for this asset?