- Home /
RPC call failed
When I click the spawn button in my multiplayer game this error shows up.
- RPC call failed because the function 'ÂClient_PlayerAlive' does not exist in the any script attached to'PlayerManager' 
- UnityEngine.NetworkView:RPC(String, RPCMode, Object[]) 
- MultiplayerManager:Client_SpawnPlayer(NetworkPlayer, Vector3, Quaternion) (at Assets/Scripts/MultiplayerManager.cs:180) 
- UnityEngine.NetworkView:RPC(String, RPCMode, Object[]) 
- MultiplayerManager:Server_SpawnPlayer(NetworkPlayer) (at Assets/Scripts/MultiplayerManager.cs:168) 
- MultiplayerManager:SpawnMenu() (at Assets/Scripts/MultiplayerManager.cs:223) 
- MultiplayerManager:OnGUI() (at Assets/Scripts/MultiplayerManager.cs:155) 
MultiplayerManager
 using UnityEngine;
 using System.Collections;
 using System.Collections.Generic;
 
 public class MultiplayerManager : MonoBehaviour 
 {
     public static MultiplayerManager instance;
     public GUIManager guiManager;
     
     public GameObject PlayerManagerPrefab;
         
     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;
     
     //General Multiplayer Modes
     public bool MatchLoaded;
     public MPPlayer MyPlayer;
     public GameObject[] SpawnPoints;
         
     void Start()
     {
         DontDestroyOnLoad(gameObject);
         instance = this;
         PlayerName = PlayerPrefs.GetString("PlayerName");
         CurrentMap = MapList[0];
     }
     
     void FixedUpdate()
     {
         instance = this;
     }
     
     void Update()
     {
     }
     
     public void StartServer(string servername, string serverpassword, int maxusers)
     {
         MatchName = servername;
         MatchPassword = serverpassword;
         MatchMaxUsers = maxusers;
         Network.InitializeServer(MatchMaxUsers, 2550, false);
         Network.InitializeSecurity();
         MasterServer.RegisterHost("DeathMatch", MatchName, "");
     }
     
     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, "", "");
     }
     
     void OnDisconnectedFromServer()
     {
         PlayerList.Clear();
     }
     
     [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);
         if(Network.player == view)
         {
             MyPlayer = tempplayer;
             GameObject play = Network.Instantiate(PlayerManagerPrefab, Vector3.zero, Quaternion.identity, 5) as GameObject;
         }
     }
     
     [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);
     }
     
     void OnGUI()
     {
         if(!MyPlayer.PlayerIsAlive && IsMatchStarted)
             SpawnMenu();
         
         if(IsMatchStarted && Input.GetKey(KeyCode.Tab))
         {
             guiManager.ScoreBoard();    
         }
     }
     
     [RPC]
     void Server_SpawnPlayer(NetworkPlayer player)
     {
         print("Sever spawn");
         int numberspawn = Random.Range(0, SpawnPoints.Length - 1);
         networkView.RPC("Client_SpawnPlayer", RPCMode.All, player, SpawnPoints[numberspawn].transform.position + new Vector3(0,2,0), SpawnPoints[numberspawn].transform.rotation);
     }
     
     [RPC]
     void Client_SpawnPlayer(NetworkPlayer player, Vector3 position, Quaternion rotation)
     {
         MultiplayerManager.GetMPPlayer(player).PlayerIsAlive = true;
         MultiplayerManager.GetMPPlayer(player).PlayerHealth = 100;
         if(player == MyPlayer.PlayerNetwork)
         {
             MyPlayer.PlayerManager.ControllerTransform.position = position;
             MyPlayer.PlayerManager.ControllerTransform.rotation = rotation;
             MyPlayer.PlayerManager.networkView.RPC("Client_PlayerAlive", RPCMode.All);
         }
         else
         {
             
         }
     }
     
     void OnLevelWasLoaded()
     {
         if(Application.loadedLevelName == CurrentMap.MapLoadName && Network.isServer)
         {
             MatchLoaded = true;
             SpawnPoints = GameObject.FindGameObjectsWithTag("spawnpoint");
             networkView.RPC("Client_ServerLoaded", RPCMode.AllBuffered, IsMatchStarted);
         }
     }
     
     [RPC]
     void Client_ServerLoaded(bool started)
     {
         MatchLoaded = true;
         IsMatchStarted = started;
     }
     
     public static MPPlayer GetMPPlayer(NetworkPlayer player)
     {
         foreach(MPPlayer play in MultiplayerManager.instance.PlayerList)
         {
             if(play.PlayerNetwork  == player)
             {
                 return play;
             }
         }
         return null;
     }
     
      //Deathmatch
     void SpawnMenu()
     {
        if(GUI.Button(new Rect(5, Screen.height -40, 250, 35),"Spawn"))
        {
          if(Network.isServer)
           Server_SpawnPlayer(Network.player);
          else
           networkView.RPC("Server_SpawnPlayer", RPCMode.Server, Network.player);
        }
     }
     
     [RPC]
     public void Client_UpdatePlayerHealthAndAlive(NetworkPlayer targetplayer, bool IsAlive, int CurrentHealth)
     {
         MPPlayer player = MultiplayerManager.GetMPPlayer(targetplayer);
         player.PlayerIsAlive = IsAlive;
         player.PlayerHealth = CurrentHealth;
     }
 }
 
 [System.Serializable]
 public class MPPlayer
 {
     public string PlayerName = "";
     public NetworkPlayer PlayerNetwork;
     public PlayerManager PlayerManager;
     public int PlayerHealth = 100;
     public bool PlayerIsAlive;
     public int PlayerScore;
     public int PlayerKills;
     public int PlayerDeaths;
 }
 
 [System.Serializable]
 public class MapSetting
 {
     public string MapName;
     public string MapLoadName;
     public Texture MapLoadTexture;
 }
PlayerManager
 using UnityEngine;
 using System.Collections;
 
 public class PlayerManager : MonoBehaviour {
 
     public MPPlayer thisplayer{
         get
         {
             return MultiplayerManager.GetMPPlayer(networkView.owner);
         }
     }
     public PlayerController Controller;
     public Transform ControllerTransform;
     
     public GameObject OutsideView;
     
     public Vector3 CurrentPosition;
     public Quaternion CurrentRotation;
     
     void Start()
     {
         ControllerTransform.gameObject.SetActive(false);
         OutsideView.SetActive(false);
         thisplayer.PlayerManager = this;
         DontDestroyOnLoad(gameObject);
     }
     
     void FixedUpdate()
     {
         if(networkView.isMine)
         {
             CurrentPosition = ControllerTransform.position;
             CurrentRotation = ControllerTransform.rotation;
         }
         else
         {
             OutsideView.transform.position = CurrentPosition + new Vector3(0,-0.1f,0);
             OutsideView.transform.rotation = CurrentRotation;
         }
     }
     
     void OnSerializeNetworkView(BitStream stream, NetworkMessageInfo info)
     {
          if (stream.isWriting) 
         {
           stream.Serialize(ref CurrentPosition);
             stream.Serialize(ref CurrentRotation);
         }
         else 
         {
             stream.Serialize(ref CurrentPosition);
             stream.Serialize(ref CurrentRotation);
         }
     }
     
     public void GetBulletDamage(int damage)
     {
         if(Network.isServer)
             Server_HandleBulletDamage(damage);
         else
         networkView.RPC("Server_HandleBulletDamage", RPCMode.Server, damage);
     }
     
     [RPC]
     public void Server_HandleBulletDamage(int damage)
     {
         thisplayer.PlayerHealth -= damage;
         if(thisplayer.PlayerHealth <= 0) //When dead
         {
             thisplayer.PlayerIsAlive = false;
             thisplayer.PlayerHealth = 0;
             networkView.RPC("Client_PlayerDead", RPCMode.All);
             MultiplayerManager.instance.networkView.RPC("Client_UpdatePlayerHealthAndAlive", RPCMode.Others, thisplayer.PlayerNetwork, false, 0);
         }
         else //When alive getting hit
         {
             MultiplayerManager.instance.networkView.RPC("Client_UpdatePlayerHealthAndAlive", RPCMode.All, thisplayer.PlayerNetwork, thisplayer.PlayerIsAlive, thisplayer.PlayerHealth);
         }
     }
     
     [RPC]
     public void Client_PlayerDead()
     {
         OutsideView.SetActive(false);
         if(networkView.isMine)
             ControllerTransform.gameObject.SetActive(false);
     }
     
     [RPC]
     public void Client_PlayerAlive()
     {
         print("Alive works");
         OutsideView.SetActive(true);
         if(networkView.isMine)
             ControllerTransform.gameObject.SetActive(true);
         else
             OutsideView.SetActive(true);
     }
 }
Answer by whydoidoit · May 07, 2013 at 09:31 PM
Looks to me like you've managed to get a non-printing character in the name of that call. "Client_PlayerAlive". Delete the string and retype it.
Thank you so much this bug caused my game to stop development, now I can finally continue.
Your answer
 
 
             Follow this Question
Related Questions
Rpc client issue 0 Answers
Temporarily hold Buffered RPC call 1 Answer
Does failed RPC affects anything? 0 Answers
Networking RPC calls never sent to other clients 1 Answer
Networked Piano 0 Answers
 koobas.hobune.stream
koobas.hobune.stream 
                       
                
                       
			     
			 
                