Network Instantiation works on one command and does not work on another
Hey there, I am making a little Fun Lan Shooter-Arena.
In this, the Bullets are Rigidbody Objects, you take no Damage but can be killed wenn pushed into certain Objects.
Now i have two ways of Firing such a "Ball" firstly, direct witch lower velocity or alternatively you charge .8 seconds and projectile is more forceful.
public GameObject bulletPrefab;
public Transform bulletSpawn;
public AudioClip blastSound;
public AudioClip chargeSound;
AudioSource audio;
void Start () {
if (!isLocalPlayer ) {
return;
}
audio = GetComponent<AudioSource>();
}
// Update is called once per frame
void Update ()
{
if (!isLocalPlayer ) {
return;
}
if(Input.GetButtonDown("Fire1"))
{
CmdShoot();
audio.PlayOneShot(blastSound);
}
if(Input.GetButtonDown("Fire2"))
{
StartCoroutine (Downtime());
audio.PlayOneShot(chargeSound);
}
}
IEnumerator Downtime()
{
yield return new WaitForSeconds (0.8f);
CmdChargedShot();
audio.PlayOneShot(blastSound);
}
[Command]
void CmdShoot()
{
GameObject bullet = (GameObject)Instantiate (bulletPrefab, bulletSpawn.position, bulletSpawn.rotation);
bullet.GetComponent<Rigidbody>().velocity = bullet.transform.forward * 25;
NetworkServer.Spawn(bullet);
Destroy(bullet, 6.0f);
}
[Command]
void CmdChargedShot()
{
GameObject bullet = (GameObject)Instantiate (bulletPrefab, bulletSpawn.position, bulletSpawn.rotation);
bullet.GetComponent<Rigidbody>().velocity = bullet.transform.forward * 50;
NetworkServer.Spawn(bullet);
Destroy(bullet, 6.0f);
}
}
As you can see, the Code is almost the same, however in Multiplayer the Client can only fire the second way. The Audio is played on "Fire1" but no bullet on the Client OR the server is spawned. "Fire2" works fine on Clients and Host. The console log is:
NullReferenceException: Object reference not set to an instance of an object Fire.CmdShoot () (at Assets/Fire.cs:54)
Since both functions CmdShoot and CmdChargedShot use the same Prefab, I really don't understand what is going on here, so I greatly appreciate any Help or Suggestions!
Update: On Instantiate these scripts are disabled on all other players, as well as all their bulletSpawn Transform.
Answer by olivers89 · Jun 23, 2016 at 11:34 AM
Found the mistake, now that I am sitting in an air conditioned train, and my brain is no longer melting:
changed the variable name on CmdShoot() from bullet to slowBullet.
needs to be an instance. works fine now.
sorry for this, hopes this helps somebody else.
Your answer
Follow this Question
Related Questions
Network Instantiation works on one command and does not work on another 0 Answers
Is this a c# error or unity bug - networking 0 Answers
UNet: Giving authority to all clients for scene objects 0 Answers
Having multiple UNET errors that I believe are caused by unity itself. Am I doing something wrong? 1 Answer
Download Multiple Images from Server and show in unity Images 0 Answers