- Home /
How to fix "ClientRpc call on un-spawned object" error, using UNET
So, I’m working on a multiplayer fps game using the new UNET system, and I’m having issues doing RPC calls. Here is my C# script attached to the player camera:
using UnityEngine;
using System.Collections;
using UnityEngine.Networking;
public class soldierHandling : NetworkBehaviour {
RaycastHit hit;
[ServerCallback]
void Update () {
CheckLookingAt();
if(!isLocalPlayer){
if(Input.GetKeyUp(KeyCode.E)){
RpcPutObjectInHand(hit.transform.gameObject);
}
}
}
[ClientRpc]
public void RpcPutObjectInHand (GameObject objectToPickUp){
Debug.Log("attempting to pick up : " + objectToPickUp);
if(hit.transform.tag == "equipable"){
objectToPickUp.transform.SetParent(this.transform.FindChild("holdPoint"));
objectToPickUp.transform.position = this.transform.FindChild("holdPoint").transform.position;
objectToPickUp.transform.rotation = this.transform.FindChild("holdPoint").transform.rotation;
objectToPickUp.GetComponent<Rigidbody>().detectCollisions=false;
objectToPickUp.GetComponent<Rigidbody>().isKinematic=true;
objectToPickUp.GetComponent<Rigidbody>().useGravity=false;
//objectToPickUp
Debug.Log("picked up : " + objectToPickUp);
}
}
void CheckLookingAt(){
Vector3 fwd = transform.TransformDirection(Vector3.forward);
if(Physics.Raycast(transform.position,fwd,out hit, 5)){
//Debug.Log("looking at: " + hit.transform);
}
}
}
Basically, the script checks what the player is looking at, when E is pressed if the object is equipable, its physics are deactivated, and it’s put in the player’s hand. (Yes, I intend to cache etc. this isn’t the finished product)
It works great on the server without the [ClientRpc] tag but obviously, doesn’t call the function on the clients. With the [ClientRpc] tag, the function never gets called and I get the following warning:
ClientRpc call on un-spawned object UnityEngine.Networking.NetworkBehaviour:SendRPCInternal(NetworkWriter, Int32, String) soldierHandling:CallRpcPutObjectInHand(GameObject) soldierHandling:Update() (at Assets/scripts/soldierHandling.cs:15)
I’m confused as the player and weapon are clearly spawned objects. Any help on the issue would be great!
Answer by Torigas · Jul 27, 2015 at 08:41 AM
Make sure you actually do a NetworkServer.Spawn after instantiating the objects: http://docs.unity3d.com/Manual/UNetSpawning.html
That article explains the difference between instantiating and networkspawning objects. Maybe that helps you. Also the Objects need to be in the list of spawnable prefabs and have a networkidentity component.
Answer by GunLengend · Nov 11, 2018 at 02:05 AM
I guess your Object not spawned by NetworkServer.Spawn or NetworkServer.AddPlayerForConnection. Please following the UNET Spawning like Torigas mentioned above
Your answer
![](https://koobas.hobune.stream/wayback/20220611233151im_/https://answers.unity.com/themes/thub/images/avi.jpg)
Follow this Question
Related Questions
Standard ClientRPC not called on client 1 Answer
How do you Change Color or any variable of non-player object on both client and server in uNet 0 Answers
how to ask Server for a value? 1 Answer
Re-send ClientRPC after new player joins 1 Answer
Rpc is received by client but Cmd is not received by server 2 Answers