Question by
DaUr3 · Dec 16, 2017 at 01:54 AM ·
networkingprefabmultiplayerprogramming
Unity Network Spawning Prefabs
I don't know what is going on here, and this might just be a stupid question, but I could find anything about this anywhere (Then again I'm pretty bad at finding things).
I am trying to instantiate a bullet into a networked scene, but for some reason, if I run something as simple as:
void Update () {
if (dead) {
return;
}
//Commands (GET SHOOT TO WORK)
if (Input.GetKeyDown(KeyCode.Space)) {
CmdFire();
}
//Non-Commands, no need to make it a Command because values are synced Network Transform
movement ();
aim ();
}
[Command]
private void CmdFire()
{
if (!isLocalPlayer) {
return;
}
// Create an instance of the shell and store a reference to it's rigidbody.
GameObject shellInstance = Instantiate(bulletPrefab, aimTransform.position, turret.transform.rotation);
//Aim is a empty game object attached to the player prefab and so it turret.
NetworkServer.Spawn(shellInstance);
}
It doesn't work and gives me the error: Trying to send command for object without authority. The bullet prefab is added to the Network Manager, it has a Network ID without any of the options ticked and it has a Network Transform.
The funny thing is that if I run:
[Command]
private void CmdFire()
{
// Create an instance of the shell and store a reference to it's rigidbody.
Rigidbody shellInstance =
Instantiate(bulletPrefab, aimTransform.position, turret.transform.rotation).getComponent<RigidBody>();
// Create a velocity that is the tank's velocity and the launch force in the fire position's forward direction.
Vector3 velocity = -aimTransform.position * 5;
// Set the shell's velocity to this velocity.
shellInstance.velocity = velocity;
NetworkServer.Spawn(shellInstance.gameObject);
}
It works perfectly fine. What the heck is going on? What part am I instantiating wrong?
Comment