Unity Networking Client NullReferenceException Error
In essence I am creating a game that involves a shooting mechanism contained in script PlayerShoot that is attached to a player prefab and a damage registering script damageDealer attached to a bullet. My problem is whenever the host player fires and hits a non host client player my code works and returns a Player 2 has been shot; however, when a client fires at a host it returns the following error
NullReferenceException: Object reference not set to an instance of an object at damageDealer.OnCollisionEnter (UnityEngine.Collision collision) [0x00045] in C:\Users\thebr\MultiShooter\Assets\Scripts\damageDealer.cs:41
PlayerShoot:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
public class PlayerShoot : NetworkBehaviour {
public PlayerWeapons weapon;
[SerializeField]
private Camera cam;
public GameObject bulletPrefab;
public Transform bulletSpawn;
public bool hitTarget = false;
public string targetHit;
void Start ()
{
if (cam == null)
{
Debug.LogError("No camera referenced: PlayerShoot");
this.enabled = false;
}
}
void Update ()
{
if (Input.GetMouseButtonDown(0))
{
CmdFire();
}
if (hitTarget == true)
{
CmdPlayerShot(targetHit);
hitTarget = false;
}
}
[Command]
void CmdFire()
{
if (weapon.name == "Phase Rifle")
{
var bullet = (GameObject)Instantiate(
bulletPrefab,
bulletSpawn.position,
bulletSpawn.rotation);
bullet.GetComponent<Rigidbody>().velocity = bullet.transform.forward * 60;
bullet.tag = "PhaseRifleBullet";
bullet.transform.GetComponent<damageDealer>().parentID = gameObject.name;
NetworkServer.Spawn(bullet);
Destroy(bullet, weapon.rangeTime);
}
else
{
Debug.LogError("You have no weapon equipped");
}
}
[Command]
void CmdPlayerShot(string _playerID)
{
Debug.Log(_playerID + "has been shot");
}
}
damageDealer
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
public class damageDealer : NetworkBehaviour
{
[SerializeField]
private int damage = 0;
public string parentID;
// Use this for initialization
void Start()
{
if (gameObject.tag == "PhaseRifleBullet")
{
damage = 5;
}
}
// Update is called once per frame
void Update()
{
}
void OnCollisionEnter(Collision collision)
{
if (collision.gameObject.layer == 10)
{
var target = collision.gameObject;
target.transform.GetComponent<PlayerController>().health -= damage;
GameObject origin = GameObject.Find(parentID);
//The error is triggered by the following two lines
origin.transform.GetComponent<PlayerShoot>().hitTarget = true;
origin.transform.GetComponent<PlayerShoot>().targetHit = target.name;
}
}
}
Your answer
Follow this Question
Related Questions
Cant reference Network.Identity connectionInfo 0 Answers
NullReferenceException 0 Answers
Gameobjects spawn differently on client and host. 0 Answers
Instantiation Problem 0 Answers
UNET Command not working 0 Answers