Question by
Heffalus · Feb 17, 2016 at 02:10 PM ·
c#unity 5networkingargumentoutofrangeexception
UNET ArgumentOutOfRangeException
So im trying to create an inventory script for multiplayer game, first off i need to be able to equip and change weapons. This is the script im using:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using UnityEngine.Networking;
public class Inventory : NetworkBehaviour {
public List<Item> inventoryItems = new List<Item>();
public List<Gun> weapons = new List<Gun> ();
public int currentWeaponID = 0;
public Transform weaponEquipPos;
public CharacterShooting characterShooting;
// Use this for initialization
public override void OnStartLocalPlayer () {
characterShooting = GetComponent<CharacterShooting> ();
SortCategories ();
NextWeapon ();
}
// Update is called once per frame
void Update () {
if (Input.GetKeyDown (KeyCode.Q)) {
NextWeapon ();
}
}
void SortCategories () {
for (int i = 0; i < inventoryItems.Count; i++) {
if (inventoryItems [i].GetComponent<Gun> ()) {
weapons.Add (inventoryItems [i].GetComponent<Gun>());
}
}
}
public void AddToInventory (Item item) {
inventoryItems.Add (item);
SortCategories ();
}
public void NextWeapon () {
if (isLocalPlayer) {
currentWeaponID += 1;
if (currentWeaponID > weapons.Count - 1) {
currentWeaponID = 0;
}
CmdEquipNewWeapon ();
}
}
[Command]
void CmdEquipNewWeapon () {
GameObject wep = Instantiate (weapons [currentWeaponID].gameObject, weaponEquipPos.position, weaponEquipPos.rotation) as GameObject;
wep.transform.parent = weaponEquipPos;
NetworkServer.Spawn (wep);
if (characterShooting.gun) {
Destroy(characterShooting.gun.gameObject);
}
characterShooting.gun = wep.GetComponent<Gun>();
}
}
As it is, it works for the game host, he can spawn and change weapons and the clients will see it, but the client cant equip a weapon. It throws an ArgumentOutOfRangeException. I checked in hierarchy and the "weapons" list is empty. I have searched for an answer unsuccessfully. Why doesnt it work for the clients?
Comment