Search Unity

  1. Good news ✨ We have more Unite Now videos available for you to watch on-demand! Come check them out and ask our experts any questions!
    Dismiss Notice

Unity Multiplayer Mirror - Networking for Unity (UNET Replacement)

Discussion in 'Connected Games' started by vis2k, Aug 11, 2016.

  1. Vancete

    Vancete

    Joined:
    May 3, 2010
    Posts:
    181
    Is there a way to get the connected users before connecting to a server? I want to make something like a server list.
     
  2. vis2k

    vis2k

    Joined:
    Sep 4, 2015
    Posts:
    3,685
    Check out our list server: https://mirror-networking.com/list-server/
     
  3. antsonthetree

    antsonthetree

    Joined:
    May 15, 2015
    Posts:
    75
    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?
     
  4. vis2k

    vis2k

    Joined:
    Sep 4, 2015
    Posts:
    3,685
    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.
     
    antsonthetree likes this.
  5. danicolaj2

    danicolaj2

    Joined:
    Sep 10, 2019
    Posts:
    1
    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.

    To summarize:

    hostA listening on port 7777 - clientB connecting to 192.168.1.33 port 7777 (LAN) - WORKS
    hostA listening on port 7777 - clientB connecting to 312.122.122.111 port 7777 (WAN) - DOES NOT CONNECT
    hostA listening on port 7777 - remote server running "telnet 312.122.122.111 7777" CONNECTS (obviously nothing happens but it connects)
    hostA NOT listening on port 7777 - remote server running "telnet 312.122.122.111 7777" does NOT connect (proving that in the case above hostA:port are reachable from the net)

    help?
    dani
     
  6. vis2k

    vis2k

    Joined:
    Sep 4, 2015
    Posts:
    3,685
    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.
     
  7. vis2k

    vis2k

    Joined:
    Sep 4, 2015
    Posts:
    3,685
    Showcase: Project Cybertronic

    Previously developed with UNET, now powered by Mirror!
    Check out their website: https://cybertronic.red/
     
  8. Roamer79

    Roamer79

    Joined:
    Oct 25, 2016
    Posts:
    41
    Ok upgraded from 1095 to latest. Got some problems:

    ClientScene.AddPlayer(conn, msg);
    Cannot convert from Mirror.StringMessage to byte[]


    Whats changed? Having trouble finding the documentation on this update.

    Thanks
     
  9. calvinstreeting

    calvinstreeting

    Joined:
    Jun 14, 2019
    Posts:
    15
    hi.
    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.)

    Many thanks
     
  10. vis2k

    vis2k

    Joined:
    Sep 4, 2015
    Posts:
    3,685
    Please post the exact error
     
  11. Roamer79

    Roamer79

    Joined:
    Oct 25, 2016
    Posts:
    41
    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;)
     
  12. vis2k

    vis2k

    Joined:
    Sep 4, 2015
    Posts:
    3,685
    We try to keep it this way, unless where completely necessary. E.g. in that case above.
     
  13. silverair

    silverair

    Joined:
    Jun 20, 2015
    Posts:
    5
    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?
     
  14. Thibault-Potier

    Thibault-Potier

    Joined:
    Apr 10, 2015
    Posts:
    206
    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
     
  15. Joe-Censored

    Joe-Censored

    Joined:
    Mar 26, 2013
    Posts:
    9,290
    There's not a lot of Mirror tutorials because Mirror is basically Unet and there are lots of Unet tutorials made over the years.
     
    Thibault-Potier and vis2k like this.
  16. kilik128

    kilik128

    Joined:
    Jul 15, 2013
    Posts:
    882
    officialy what's the unity solution HLAPI already drepreced too like unet ?
    thn'aks
     
  17. Joe-Censored

    Joe-Censored

    Joined:
    Mar 26, 2013
    Posts:
    9,290
    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.
     
  18. kilik128

    kilik128

    Joined:
    Jul 15, 2013
    Posts:
    882
    i want say lol
     
  19. FuhaoXie

    FuhaoXie

    Joined:
    Nov 18, 2016
    Posts:
    14
    Seems Mirror dont have lan matchmaking, I think it will be very useful to provide a lan matchmaking feature for developer.
     
  20. sth4881

    sth4881

    Joined:
    Oct 1, 2019
    Posts:
    3
    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? upload_2019-10-10_17-32-59.png
     
  21. vis2k

    vis2k

    Joined:
    Sep 4, 2015
    Posts:
    3,685
    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.
     
  22. vis2k

    vis2k

    Joined:
    Sep 4, 2015
    Posts:
    3,685
    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.
     
  23. FuhaoXie

    FuhaoXie

    Joined:
    Nov 18, 2016
    Posts:
    14
    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.
     
  24. tranos

    tranos

    Joined:
    Feb 19, 2014
    Posts:
    163
    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.
     
    Last edited: Oct 10, 2019
  25. digiross

    digiross

    Joined:
    Jun 29, 2012
    Posts:
    264
    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.
     
  26. Joe-Censored

    Joe-Censored

    Joined:
    Mar 26, 2013
    Posts:
    9,290
    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
     
    Willbkool_FPCS, digiross and TwoTen like this.
  27. digiross

    digiross

    Joined:
    Jun 29, 2012
    Posts:
    264
    @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. :eek:
     
  28. Joe-Censored

    Joe-Censored

    Joined:
    Mar 26, 2013
    Posts:
    9,290
    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.
     
    Last edited: Oct 12, 2019
  29. digiross

    digiross

    Joined:
    Jun 29, 2012
    Posts:
    264
    Thanks for the insight! :)
     
  30. FuhaoXie

    FuhaoXie

    Joined:
    Nov 18, 2016
    Posts:
    14
    Is there a quick Relieable UDP solution in mirror?
     
  31. MrG

    MrG

    Joined:
    Oct 6, 2012
    Posts:
    335
    There are a bunch of different transports for Mirror, including two that are UDP-based.
     
  32. MrG

    MrG

    Joined:
    Oct 6, 2012
    Posts:
    335
  33. goldbug

    goldbug

    Joined:
    Oct 12, 2011
    Posts:
    708
    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
     
    Slaghton, FuhaoXie, hopeful and 2 others like this.
  34. Crossway

    Crossway

    Joined:
    May 24, 2016
    Posts:
    420
    Is here any Playmaker actions available for this asset?
     
  35. IkeRoyle

    IkeRoyle

    Joined:
    Sep 11, 2018
    Posts:
    2
    Hi, sorry for the highjack but it seems you and I are starting very simmelar projects. I'm building a physics instance based game with simmelar requirements. I was insprired by this blog using Kubernetes! Maybe its some use for you like it was for me! :)
    https://www.compoundtheory.com/scal...bernetes-part-1-containerising-and-deploying/
     
  36. digiross

    digiross

    Joined:
    Jun 29, 2012
    Posts:
    264
    @IkeRoyle thanks for the link, i'll have to check it out!
     
  37. MrG

    MrG

    Joined:
    Oct 6, 2012
    Posts:
    335
    Not from us, but Mirror works with Bolt Visual Scripting according to one of our users.
     
  38. antsonthetree

    antsonthetree

    Joined:
    May 15, 2015
    Posts:
    75
    There seems to be a bug in the Room example. The problem is that NetworkManager.clientLoadedScene is never getting set to true, and NetworkManager.clientReadyConnection is always null. This is happening because in NetworkManager:OnClientAuthenticated (line 929) you are testing IsNullOrEmpty(onlineScene) and the Room example requires onlineScene to be empty.

    You can repro this by running the Room example and once you have started the gameplay scene you will see that clientLoadedScene is false and clientReadyConnection is null. The expected behavior is that these values will be set correctly.

    Thanks
     
  39. sth4881

    sth4881

    Joined:
    Oct 1, 2019
    Posts:
    3
    I downloaded ur asset 'Mirror' and extracted to the Asset folder. Should I have to do anything more?? I didn't understand about how to 'try to extend our examples'. TY so much for replyi
     
  40. sth4881

    sth4881

    Joined:
    Oct 1, 2019
    Posts:
    3
    Finally, I made it by extracting the latest version of mirror in 'Asset' folder. Now I can use it. TY
     
    vis2k likes this.
  41. vis2k

    vis2k

    Joined:
    Sep 4, 2015
    Posts:
    3,685
    We'll look into it!
     
  42. vis2k

    vis2k

    Joined:
    Sep 4, 2015
    Posts:
    3,685
    Progress Update: we reimplemented authority from scratch.
    A player now has authority over a GameObject if he can call Cmds on it. That's it, nothing more.
    We also removed local player authority, which meant 'trust the client with everything', as opposed to the default 'server authoritative' design where the server makes all the decisions.
     
  43. chrisk

    chrisk

    Joined:
    Jan 23, 2009
    Posts:
    691
    There is one case where local player authority is necessary.

    In FPS game, when you shoot an enemy, you need an immediate response. The client detects the hit and tells the server that it hit the enemy. Without this, there is no way that hit detection can be made accurately in a responsive way.

    Not sure why you removed the local authority but it should be a choice from the developers.
     
    RealMTG likes this.
  44. vis2k

    vis2k

    Joined:
    Sep 4, 2015
    Posts:
    3,685
    You can still do this. For example, you could use a command like [Cmd] CmdFire(Ray ray) to let the server know where the player fired.

    The whole local authority feature was very strange. It meant that the client would be trusted with everything.
     
  45. kirbyderby2000

    kirbyderby2000

    Joined:
    Apr 28, 2017
    Posts:
    19
    I have really dumb questions. So I'm currently reading through the Mirror documentation and tutorials, which is all fantastic by the way, great job! Now I only have a couple questions:

    1. Do I need a dedicated server with Mirror in order for clients to connect to each other / matchmaking?
    2. If I do need a dedicated server, is there a guide or tutorial on how / where I can deploy the server onto something like Azure or AWS? I can't seem to find any resources on this topic if it's required.
    3.I also can't seem to find any resources on writing match making logic on the server's side. Does anyone have any tips on figuring out how to do that?

    Sorry, I'm pretty illiterate when it comes to networking but I'm slowly coming around.
     
    Twyker, D3m0n and BitPax like this.
  46. chrisk

    chrisk

    Joined:
    Jan 23, 2009
    Posts:
    691
    Thanks. I thought so.
    I suppose local player movement control is also can be achieved similarly. Local player detects the collision locally and sends the position to the server and the server just check if there is a hack or not.
     
  47. chrisk

    chrisk

    Joined:
    Jan 23, 2009
    Posts:
    691
    I have one more question about the local player authority.
    Assuming you have authority over your own character, meaning you control, detect collisions and sent the final transform information to the server, does this require local player authority?
    If not, what authority do you have when you are controlling your own characters?

    A similar situation can happen when you drive a car.
    Car, when undriven, it will be controlled by the server, such as rolling down the hill when pushed by some force.
    However, when a player takes control of the car, everything will be simulated and controlled by the client and final transformation will be sent over the server.

    Transferring this control from server to client, does it involve the local client authority?
    I'm a bit confused about what local player authority means and what we need to do to workaround in the absence.

    Thanks.
     
  48. eaquino_unity

    eaquino_unity

    Joined:
    Aug 13, 2019
    Posts:
    13
    Hi,

    I have a question regarding Mirror, in Photon there is a function using AllBuffered that allows a disconnected client after reconnecting with the host, retrieving all the information from the server and clients (Objects in scene, transformed, size, variables, etc. ).

    With Mirror can I have that functionality? because at UNET I can't find a way to implement it.

    Thanks!
     
  49. MrG

    MrG

    Joined:
    Oct 6, 2012
    Posts:
    335
    Mirror automatically delivers the current states and objects whenever a client connects, whether they were connected before or not.
     
    vis2k likes this.
  50. MrG

    MrG

    Joined:
    Oct 6, 2012
    Posts:
    335
    Mirror has AssignClientAuthority and RemoveClientAuthority for that.
     
unityunity