Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 13 Next capture
2021 2022 2023
1 capture
13 Jun 22 - 13 Jun 22
sparklines
Close Help
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
avatar image
0
Question by kjones3d · Dec 04, 2012 at 02:56 AM · errorfpstutorialargument

Argument out of Range

I'm trying to build a multiplayer FPS for my class. I'm using this tutorial: http://www.youtube.com/watch?v=lFI4FGWL-fs

I got all the way to the end, I believe I've followed it to the nose, but when I go to start my match, it takes me back to the main menu and gives me the error "ArgumentOutOfRangeException: Argument is out of range. Parameter name: Index" It's referencing line 26 of my code which is "CurrentMap = MapList[0];"

 using UnityEngine;
 using System.Collections;
 using System.Collections.Generic;
 
 public class MultiplayerManager : MonoBehaviour 
 {
     public static MultiplayerManager instance;
     
     public string PlayerName;
     
     private string MatchName = "";
     private string MatchPassword = "";
     private int MatchMaxUsers = 32;
     
     public List<MPPlayer> PlayerList = new List<MPPlayer>();
     public List<MapSetting> MapList = new List<MapSetting>();
     
     public MapSetting CurrentMap = null;
     public int oldprefix;
     public bool IsMatchStarted = false;
     
     void Start()
     {
         instance = this;
         PlayerName = PlayerPrefs.GetString("PlayerName");
         CurrentMap = MapList[0];
     }
     
     void FixedUpdate()
     {
         instance = this;
     }
     
     public void StartServer(string servername, string serverpassword, int maxusers)
     {
         MatchName = servername;
         MatchPassword = serverpassword;
         MatchMaxUsers = maxusers;
         Network.InitializeServer(MatchMaxUsers, 2550, false);
         MasterServer.RegisterHost("Death Match", MatchName, "");
         //Network.InitializeSecurity();
     }
     
     void OnServerInitialized()
     {
         Server_PlayerJoinRequest(PlayerName, Network.player);
     }
     
     void OnConnectedToServer()
     {
         networkView.RPC("Server_PlayerJoinRequest", RPCMode.Server, PlayerName, Network.player);
     }
     
     void OnPlayerDisconnected(NetworkPlayer id)
     {
         networkView.RPC("Client_RemovePlayer", RPCMode.All, id);
     }
     
     void OnPlayerConnected(NetworkPlayer player)
     {
         foreach(MPPlayer pl in PlayerList)
         {
             networkView.RPC("Client_AddPlayerToList", player, pl.PlayerName, pl.PlayerNetwork);
         }
             networkView.RPC("Client_GetMultiplayerMatchSettings", player, CurrentMap.MapName, "", "");
     }
         
     [RPC]
     void Server_PlayerJoinRequest(string playername, NetworkPlayer view)
     {
         networkView.RPC("Client_AddPlayerToList", RPCMode.All, playername, view);
     }
     
     [RPC]
     void Client_AddPlayerToList(string playername, NetworkPlayer view)
     {
         MPPlayer tempplayer = new MPPlayer();
         tempplayer.PlayerName = playername;
         tempplayer.PlayerNetwork = view;
         PlayerList.Add(tempplayer);
     }
     
     [RPC]
     void Client_RemovePlayer(NetworkPlayer view)
     {
         MPPlayer temppl = null;
         foreach(MPPlayer pl in PlayerList)
         {
             if(pl.PlayerNetwork == view)
             {
                 temppl = pl;
             }
         }
         if(temppl != null)
         {
             PlayerList.Remove(temppl);
         }
     }
     
     [RPC]
     void Client_GetMultiplayerMatchSettings(string map, string mode, string others)
     {
         CurrentMap = GetMap(map);
     }
     
     public MapSetting GetMap(string name)
     {
         MapSetting get = null;
         
         foreach(MapSetting st in MapList)
         {
             if(st.MapName == name)
             {
                 get = st;
                 break;
             }
         }
         
         return get;
     }
     
     [RPC]
     void Client_LoadMultiplayerMap(string map, int prefix)
     {
         Network.SetLevelPrefix(prefix);
         Application.LoadLevel(map);
     }
 }
 
 [System.Serializable]
 public class MPPlayer
 {
     public string PlayerName = "";
     public NetworkPlayer PlayerNetwork;
 }
 
 [System.Serializable]
 public class MapSetting
 {
     public string MapName;
     public string MapLoadName;
     public Texture MapLoadTexture;
 }
 

I've been told that I need to assign a value to my MapList, but I'm not sure where or how to do that. Any help would be greatly appreciated.

Comment
Add comment
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

1 Reply

· Add your reply
  • Sort: 
avatar image
2
Best Answer

Answer by CodeMasterMike · Dec 04, 2012 at 06:20 AM

Your MapList-variable is a list, which should contain a MapSetting class instance.

So this error message means that the element in the list, in your case element 0, is empty. Meaning the whole list is empty. So you can't load a map.

So you need to fill this list with MapSetting variables before you can call it. Reading the code, you should somewhere before you make the "CurrentMap = MapList[0];", add at least one map to the list.

You probably need to add some MapSetting variables through the script inspector in the editor.

Good luck!

Comment
Add comment · Show 1 · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image kjones3d · Dec 04, 2012 at 04:01 PM 0
Share

The scene I was using for my map apparently wasn't good enough (it only had a terrain and nothing else done to it). I got a proper one from the asset store and it fixed my list problem.

Thanks!

Your answer

Hint: You can notify a user about this post by typing @username

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this Question

Answers Answers and Comments

10 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

Multiple Cars not working 1 Answer

FPS SCRIPT ERROR PLEASE HELP 2 Answers

Multiplayer FPS Tutorial 1 Answer

what is wrong with this online FPS script(not done) ? 1 Answer

error CS1061 anybody might help me? 1 Answer


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges