NullReferenceException

Hey guys. I am trying to integrate a shooting script into my unity scene! I have applied it to my weapon and have followed the way it is set out. After a number of hours trying to find a way to get around the problem I finally decided to just post here.

The error is: NullReferenceException
WeaponScriptNEW.Update () (at Assets/Scripts/Proper FPS Scripts/WeaponScriptNEW.js:217)

The script is very lengthy so I will just post all the variables and also where the error is pointing to!

/**
*  Script written by OMA [www.armedunity.com]
**/

@script ExecuteInEditMode()

enum fireMode { none, semi, auto, burst, launcher}
@HideInInspector
var currentMode = fireMode.semi;
var firstMode = fireMode.semi;
var secondMode = fireMode.launcher;

enum Ammo { Magazines, Bullets }
var ammoMode : Ammo = Ammo.Magazines;

var canReloadLauncher : boolean = false; 
	
	var soundDraw : AudioClip;
	var soundFire : AudioClip;
	var soundReload : AudioClip;
	var soundEmpty : AudioClip;
	var switchModeSound : AudioClip;

	var weaponAnim : GameObject;
	var Concrete : GameObject;
	var Wood : GameObject;
	var Metal : GameObject;
	var Dirt : GameObject;
	var Blood : GameObject;
	var untagged : GameObject;

	var layerMask : LayerMask;
	var muzzleFlash : Renderer;
	var muzzleLight : Light;

	var damage : int = 50;
	var bulletsPerMag : int = 50;
	var magazines : int = 5;
	private var fireRate : float = 0.1;
	var fireRateFirstMode : float = 0.1;
	var fireRateSecondMode : float = 0.1;
	var reloadTime : float = 3.0;
	var reloadAnimSpeed : float = 1.2;
	var drawTime : float = 1.5;
	
	var range : float = 250.0;
	var force : float = 200.0;
	
	//Weapon accuracy
	private var baseInaccuracy : float;
	var baseInaccuracyAIM : float = 0.005;
	var baseInaccuracyHIP : float = 1.5;
	var inaccuracyIncreaseOverTime : float = 0.2;
	var inaccuracyDecreaseOverTime : float = 0.5;
	private var maximumInaccuracy : float;
	var maxInaccuracyHIP : float = 5.0;
	var maxInaccuracyAIM : float = 1.0;
	
	private var triggerTime : float = 0.05;
	
	//Aiming
	var hipPosition : Vector3;
	var aimPosition : Vector3;
	private var aiming : boolean;
	private var curVect : Vector3;
	var aimSpeed : float = 0.25;
	
	//Field Of View
	var zoomSpeed : float = 0.5;
	var FOV : int = 40;
	
	private var bulletsLeft : int = 0;
	private var m_LastFrameShot : int = -10;
	private var nextFireTime : float = 0.0;
	@HideInInspector
	var reloading : boolean;
	private var draw : boolean;
	private var weaponCamera : GameObject;
	private var mainCamera : GameObject;
	private var playing : boolean = false;
	@HideInInspector
	var selected : boolean = false;
	private var player : GameObject;
	private var isFiring : boolean = false;
	private var bursting : boolean = false;
	
	//Burst
	var shotsPerBurst : int = 3;
	var burstTime : float = 0.07;	
	
	//GUI
	var mySkin : GUISkin; 

	//Launcher
	var projectilePrefab : Rigidbody;
	var projectileSpeed = 30.0;
	var projectiles = 20;
	var launchPosition : GameObject;
	var fireLauncherAnimGO : GameObject;
	var soundReloadLauncher : AudioClip;
	private var launcjerReload : boolean = false;
	var launcherReloadTime : float = 2.0;
	var reloadlauncher : String = "reloadlauncher";
	private var rocket : GameObject;
	
	//KickBack
	var kickGO : Transform;
	var kickUpside : float = 0.5;
	var kickSideways : float = 0.5;
	
	//Crosshair Textures
	var crosshairFirstModeHorizontal : Texture2D;
	var crosshairFirstModeVertical : Texture2D;
	var crosshairSecondMode : Texture2D;
	private var adjustMaxCroshairSize : float = 6.0;
	
	//Switch Weapon Fire Modes
	private var canSwicthMode : boolean = true;
	
function Start(){
    weaponCamera = GameObject.FindWithTag("WeaponCamera");
	mainCamera = GameObject.FindWithTag("MainCamera");
	player = GameObject.FindWithTag("Player");
    muzzleFlash.enabled = false;
	muzzleLight.enabled = false;
	bulletsLeft = bulletsPerMag;
	currentMode = firstMode;
	fireRate = fireRateFirstMode;
	aiming = false;
	if(firstMode == fireMode.launcher){
		rocket = GameObject.Find("RPGrocket");
	}
	if(ammoMode == Ammo.Bullets){
	    magazines = magazines * bulletsPerMag;
	}
}

// This is within the function Update!

if(aiming){
		maximumInaccuracy = maxInaccuracyAIM;
		baseInaccuracy = baseInaccuracyAIM;
		mainCamera.camera.fieldOfView -= FOV * Time.deltaTime/zoomSpeed;
		if(mainCamera.camera.fieldOfView < FOV){
			mainCamera.camera.fieldOfView = FOV;
		}
		weaponCamera.camera.fieldOfView -= 40 * Time.deltaTime/zoomSpeed;
		if(weaponCamera.camera.fieldOfView < 40){
			weaponCamera.camera.fieldOfView = 40;
		}
	}else{
		maximumInaccuracy = maxInaccuracyHIP;
		baseInaccuracy = baseInaccuracyHIP;
		mainCamera.camera.fieldOfView += 60 * Time.deltaTime/0.5; // This is where the error is pointing to!
		if(mainCamera.camera.fieldOfView > 60){
			mainCamera.camera.fieldOfView = 60;
		}
		weaponCamera.camera.fieldOfView += 50 * Time.deltaTime/0.5;
		if(weaponCamera.camera.fieldOfView > 50){
			weaponCamera.camera.fieldOfView = 50;
		}
	}

I can’t save nor enable/disable anything within the inspector. I will be very grateful if anyone can help me! Thank you.

that error can occur if you have an exposed variable in the inspector and you dont reference it …so make sure that WeaponScriptNEW has all its public var filled because you call an object like var object :GameObject; but then it returns null if it has nothing assigned …so yea all i can derive from this snip of code is to check ur vars …post the WeaponScriptNEW to we can see the full error.

Possible reasons are:

  • You have no object tagged “MainCamera”
  • You have multiple objects in your scene tagged “MainCamera” where some of them don’t have a Camera component attached
  • Your gameobject that is tagged “MainCamera” doesn’t have a Camera component attached.
  • The GameObject tagged “MainCamera” is not active.