1. We've introduced thread tags, search within a thread and similar thread search. Read more here.
    Dismiss Notice
  2. Learn how you'll soon be able to publish your games to China in four simple steps with Xiaomi. Sign up now for early access.
    Dismiss Notice
  3. Get further faster with the Unity Plus Accelerator Pack, free for new Unity Plus subscribers for a limited time. Click here for more details.
    Dismiss Notice
  4. We've released our first Timeline Experimental Preview, our new tool for creating cutscenes and more! To check it out click here.
    Dismiss Notice
  5. Unity 5.5 is now released.
    Dismiss Notice
  6. Check out all the fixes for 5.5 in patch releases 1 & 2.
    Dismiss Notice
  7. Unity 5.6 beta is now available for download.
    Dismiss Notice

Simple Multiplayer Game Tutorial now live

Discussion in 'Community Learning & Teaching' started by willgoldstone, Mar 7, 2016.

  1. willgoldstone

    willgoldstone

    Unity Technologies

    Joined:
    Oct 2, 2006
    Posts:
    563
    Hi all, we just shipped the first of many tutorials for networking, making a simple 2 player shooting game to help newcomers get to grips with the system. It's written too as I know many of you are keen for us to do more of that than video.

    http://unity3d.com/learn/tutorials/topics/multiplayer-networking

    Hope you like!

    Will
     
    MHUnity, malkere, dylanh7244 and 4 others like this.
  2. OldRod

    OldRod

    Joined:
    Mar 2, 2009
    Posts:
    84
    This is great, thank you!
     
    NirmalNishanth likes this.
  3. BombEthan

    BombEthan

    Joined:
    Mar 7, 2015
    Posts:
    2
    I have been following your tutorial so far and it is great; However, when I was on part 10 when I ran into my first error. I get the following error:
    InvalidCastException: Cannot cast from source type to destination type.
    PlayerController.Fire () (at Assets/PlayerController.cs:32)
    PlayerController.Update () (at Assets/PlayerController.cs:24).

    I also get this error when I don't comment out this part of the code--> NetworkServer.Spawn(bullet);
    Assets/PlayerController.cs(41,23): error CS1502: The best overloaded method match for `UnityEngine.Networking.NetworkServer.Spawn(UnityEngine.GameObject)' has some invalid arguments

    Assets/PlayerController.cs(41,23): error CS1503: Argument `#1' cannot convert `UnityEngine.Rigidbody' expression to type `UnityEngine.GameObject'

    I am guessing that I did something wrong but not sure where since I copy and pasted the whole finished chunk of code on part 10. Thanks for any help.
     
  4. Que

    Que

    Joined:
    Mar 14, 2014
    Posts:
    113
    Thank
    Nice. It's time to jump in to multiplaying.
     
  5. Freakyuno

    Freakyuno

    Joined:
    Jul 22, 2013
    Posts:
    138
    Setup a dropbox with your code in it so someone can take a look. For cast exceptions, it's going to be really hard to figure it out without seeing your code specifically.

    If you're not interested in dropbox - at least use the code tag and put your class contents into a message.
     
  6. mgear

    mgear

    Joined:
    Aug 3, 2010
    Posts:
    3,527
  7. BombEthan

    BombEthan

    Joined:
    Mar 7, 2015
    Posts:
    2
  8. Stillborn

    Stillborn

    Joined:
    Nov 3, 2012
    Posts:
    4
    OMG.... Please do something Other than NetworkManager Tutorial for crying outloud there aready 500 tutorial on Youtube of the same thing.. How about Client / Server Tutorial 2 seperate Scripts NetworkServer.cs NetworkClient.cs 2 different scenes Server Scene Client Scene..
     
    Last edited: Mar 21, 2016
  9. Baroni

    Baroni

    Joined:
    Aug 20, 2010
    Posts:
    1,873
    Health bars don't update for new players, they are all full when a client joins (even though a player took some damage before). This is because the OnChangeHealth hook is not called initially for the client at start - only after that. You will have to override the OnStartClient method and call all hooks manually.
     
  10. Adam-Buckner

    Adam-Buckner

    Unity Technologies

    Joined:
    Jun 27, 2007
    Posts:
    5,503
    There was a typo in the lesson code and it has been corrected. Network spawn needs a GameObject not a Rigidbody.
     
  11. badawe

    badawe

    Joined:
    Jan 17, 2011
    Posts:
    297
    I need to agree with @Stillborn, every single tutorial out there is exactly the same, add NetworkManger, add NetworkManagerHUD, add Identity to the player and sync transform and is done. And this is far from what we need to use to actually create something nice with this. Will be really nice if we actually show, how to communicate properly with the players, server and ids.
     
  12. Adam-Buckner

    Adam-Buckner

    Unity Technologies

    Joined:
    Jun 27, 2007
    Posts:
    5,503
    We will be rolling out more complex multiplayer lessons and assignments as we go. As much as I appreciate the fact that there are a number of 3rd party tutorials on the internet and YouTube, we cannot rely on these as official teaching solutions. Be aware, however, that most of our tutorials are going to revolve around the High Level API provided by Unity Networking.

    So, expect a few more very simple tutorials before we get more complex. We want to make sure that everyone has a chance to get started from the ground up using official tutorials.
     
  13. Adam-Buckner

    Adam-Buckner

    Unity Technologies

    Joined:
    Jun 27, 2007
    Posts:
    5,503
    Ah - good point. I'll look into updating this and keeping the lesson as simple as possible.
     
  14. badawe

    badawe

    Joined:
    Jan 17, 2011
    Posts:
    297
    That is awesome Adam, really appreciate that!
    I add a few questions here: http://forum.unity3d.com/threads/how-inform-a-bullet-who-is-the-owner.394484/ a simple thing I can't get my head around it yet :S
     
  15. asae

    asae

    Joined:
    Feb 23, 2014
    Posts:
    2
    I can get the tutorial to work when running a build on the same computer as the Unity editor.
    However the problem I'm having is that when I run it on an Android device (Samsung S7 Edge) and Windows 10 computer. I'm running the server in the Unity editor and enter its IP address in the LAN Client box on the Android device. The Android device never connects to the Windows computer.
     
  16. fineman

    fineman

    Joined:
    Mar 23, 2012
    Posts:
    19
    Just worked through this - nice work, very good and introduces each of the fundamental concepts. One comment as a former creator of training material myself - if you are going to say (as you do with the health bar UI) "the following solution is less than optimal" it would be nice to explain why, or direct readers somewhere they can understand why it is not optimal :)
     
  17. fineman

    fineman

    Joined:
    Mar 23, 2012
    Posts:
    19
    I have just noticed that when I launch an instance of the completed tutorial application, even before I start the host (so only the network HUD is running) the Unity client is using 25% of CPU continually on a core i7 gaming laptop. This can't be right surely?
     
  18. pingboo

    pingboo

    Joined:
    Apr 3, 2016
    Posts:
    7
    I already did take a look on the given tutorial and have done it myself. I have run it successfully on the pc but I'm still wondering or really confused on how to do this on android devices? I've searched for possible ways but I can't seem to find a solution.

    Hope someone could further explain or at least say some steps on how could I achieve this.
     
  19. Culzean

    Culzean

    Joined:
    Jan 25, 2014
    Posts:
    40
    This is nice, I am trying to follow the tutorial in my own project but have run into a problem.

    When I test the local server out with two versions I have two players. But they are glued to the same spot. Is the network transform not working right? To reiterate, the player that joins the server, if I move him he is rubber banding to the original player, while if I move the original player the second one is getting dragged around. Any ideas what I have done wrong?

    blue for local, red for remote.
     

    Attached Files:

    • mp.jpg
      mp.jpg
      File size:
      252 KB
      Views:
      89
  20. Artaani

    Artaani

    Joined:
    Aug 5, 2012
    Posts:
    161
    Excuse me, but this tutorial is almost useless, since it have very crucial mistake at the first and most important step: How to Start and Connect to server.

    You are using default NetworkManagerHUD, but it useless for complete project.
    You better explain how to start a server via C# code and connect to it using direct IP connection.

    This simple task is very over-complicated in the new network system in compassion to the old one.
    I found several different ways to start a server and still not sure which one is correct.

    Also you should show how to spawn a player using a code, instead of automatic spawn of Network Manager.


    Please don't get me wrong, I am VERY admire the Unity, but this new network system and/or its manual is terrible. So hard to understand something about how it works. However previous network system I learned easily for a couple of hours.
     
  21. Sarrivin

    Sarrivin

    Joined:
    Dec 18, 2015
    Posts:
    17
    I have a problem with this tutorial:
    When I Host a game, my player and enemies (4 clones) are spawned properly via OnStartServer(). Enemies and my player are destroyed when server is stopped, with Unity still in Play mode.
    But OnStartServer() isn't called whan I host game again. Not at all. So my player is spawned, but not enemies.
    How can I fix it?

    Ps. Also Health isn't synchronized when new player joins. You must fire and hit another player to see his current in healt bar.
     
    Last edited: Sep 21, 2016
  22. DennyBoy

    DennyBoy

    Joined:
    Jan 19, 2016
    Posts:
    34
    Can you make a video seires on it too?
     
  23. Adishah11

    Adishah11

    Joined:
    Aug 10, 2015
    Posts:
    4