- Home /
Only host can spawn objects on server, when the client tries to spawn an object it returns the error, "NetworkServer is not active. Cannot spawn objects without an active server."
I have been trying to make a functioning spawning system in a game I'm making, I've followed countless tutorials and read through pages of documentation and I still don't understand why this isn't working. Here is my code:
public void SpawnBulletLocalityCheck(Vector3 bulletPos, Quaternion bulletRot)
{
if(!isLocalPlayer)
{
return;
}
else if(isLocalPlayer)
{
spawnBullet(bulletPos, bulletRot);
}
}
[Command]
public void spawnBullet(Vector3 pos, Quaternion rot)
{
Debug.Log("object spawned locally");
GameObject b = Instantiate(Bullet, pos, rot);
NetworkServer.Spawn(b);
Debug.Log("object Spawned on server");
}
I have tried other variations of this code like:
[Command]
public void BulletSpawn(Vector3 Pos, Quaternion Rot)
{
Debug.Log("Bullet Spawned");
GameObject go = Instantiate(Bullet, Pos, Rot);
NetworkServer.Spawn(go);
}
Yet no matter how many times I remake it i get the same error, "NetworkServer is not active. Cannot spawn objects without an active server." The script is derived from NetworkBehaviour and I have tried troubleshooting and found that the code works seamlessly for the Host, they spawn the object on the server and the client can see said object. Yet, for the client the server is "not active". I made sure that the bullet prefab was in the Registered Spawnable Prefabs on the Network Manager and have even tried playing with the network identity. Does anybody have any idea why this is happening and any way I can fix it?
Answer by Bunny83 · Mar 05, 2021 at 10:24 PM
Well, I guess you use UNet? You know that it's deprecated for a long time now. It may still work but keep in mind that Unity has already faded it out.
Apart from that keep in mind that Command method are not executed on the client. The client may call the method, but it should be executed on the server. So your debug.Log should not be seen on the client.
It's been a long time ago since I used UNet. Are you sure your Bullet prefab has a NetworkIdentity script? Where exactly do you get this error? On the client or on the server? As far as I remember Command method need to have the "Cmd" prefix in the name which your method does not have. See the documentation over here:
Commands functions must have the prefix “Cmd”. This is a hint when reading code that calls the command - this function is special and is not invoked locally like a normal function.
Since you're missing that prefix in your method name your method is probably called locally on the client which of course does not work.
Yes the Bullet Prefab has a NetworkIdentity script, I have tried running it with server only checked, local player authority checked, and neither checked. All of them result in the same error. I only get the error on the client, the host spawns objects seamlessly. Thank you I didn't realize that I needed to prefix command functions with Cmd. I guess I'm just confused on the whole networking setup... why am I getting the error that the Server is not active. Is this because I'm using UNet? If so is there any alternative I can use? Any help would be greatly appreciated.
Your answer
Follow this Question
Related Questions
Why are objects only spawning on host but not on remote clients? 3 Answers
Unity networking tutorial? 6 Answers
send data from client to local server 0 Answers