Object reference not set to an instance of an object

I am making an RTS and whenever I try to click on a unit, it returns with an error saying

NullReferenceException: Object
reference not set to an instance of an
object MousePoint.Update () (at
Assets/Standard
Assets/Scripts/MousePoint.cs:112)

This is my script, please help.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MousePoint : MonoBehaviour {

	#region Class Variables

	RaycastHit hit;

	public GameObject Target;
	public static GameObject CurrentlySelectedUnit;
	public static ArrayList CurrentlySelectedUnits = new ArrayList();
	public static ArrayList UnitsOnScreen = new ArrayList ();
	public static ArrayList UnitsInDrag = new ArrayList();

	private static Vector3 mouseDownPoint;
	private static bool UserIsDragging;
	private static float TimeLimitBeforeDeclareDrag = 1f;
	private static float TimeLeftBeforeDeclareDrag;
	private static Vector2 MouseDragStart;
	private static float clickDragZone = 1.3f;
	private bool FinishedDragOnThisFrame;

	//GUI
	public LayerMask SelectMeshLayerMask;

	#endregion
	
	// Update is called once per frame
	void Update ()
	{

		Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);

		if (Physics.Raycast (ray, out hit, Mathf.Infinity)) {
			//Store point at mouse button down
			if (Input.GetMouseButtonDown (0)) {
				mouseDownPoint = hit.point;
			
			//Mouse drag
				if (Input.GetMouseButtonDown (0)) 
				{
					TimeLeftBeforeDeclareDrag = TimeLimitBeforeDeclareDrag;
					MouseDragStart = Input.mousePosition;
				} 
				else if (Input.GetMouseButton (0)) 
				{
					//If user is not dragging, do tests
					if (!UserIsDragging) 
					{
						TimeLeftBeforeDeclareDrag -= Time.deltaTime;
						if (TimeLeftBeforeDeclareDrag <= 0f) 
						{
							//If tests pass true, user is dragging
							UserIsDragging = true;
						}
					}

					//User is dragging, lets compete (GUI)
					//if(UserIsDragging)
					//Debug.Log("User is dragging!");
				} 
				else if (Input.GetMouseButtonUp (0)) 
				{
					TimeLimitBeforeDeclareDrag = 0f;
					UserIsDragging = false;
				}
			
			}

			if (hit.collider.name == "TerrainMain") {

				//When we click the right mouse button, instantiate target
				if (Input.GetMouseButtonDown (1)) {
					GameObject TargetObj = Instantiate (Target, hit.point, Quaternion.identity) as GameObject;
					TargetObj.name = "Target Instantiated";

				} else if (Input.GetMouseButtonUp (0) && DidUserClickLeftMouse (mouseDownPoint))
				{
					if(!CTRLKeysDown())
						DeselectGameObjectsIfSelected ();
				}



			} //End of the terrain

			else { 

				//Hitting other objects
				if (Input.GetMouseButtonUp (0) && DidUserClickLeftMouse (mouseDownPoint)) 
				{

					//Is the user hitting a unit?
					if (hit.collider.gameObject.GetComponent<Unit>() || hit.collider.gameObject.layer == LayerMask.NameToLayer("SelectMesh"))
					{
						Transform UnitGameObject;
						if (hit.collider.gameObject.layer == LayerMask.NameToLayer ("SelectMesh"))
							UnitGameObject = hit.collider.transform.parent.transform;
						else
							UnitGameObject = hit.collider.transform;

						//Are we selecting a different object?
						if (!UnitAlreadyInCurrentlySelectedUnits (UnitGameObject.gameObject)) 
					{
							
							//If the CTRL key is not down, remove the rest of the units
							if (!CTRLKeysDown ())
								DeselectGameObjectsIfSelected ();

							GameObject SelectedObj = UnitGameObject.Find("Selected").gameObject;
							SelectedObj.active = true;

							//Add unit to currently selected units
							CurrentlySelectedUnits.Add (UnitGameObject.gameObject);

							//Change unit Selected value to true
							UnitGameObject.gameObject.GetComponent<Unit> ().Selected = true;


						} else {
							//Unit is already in the currently selected units arraylist
							//Remove the unit
							if (CTRLKeysDown())
								RemoveUnitFromCurrentlySelectedUnits (UnitGameObject.gameObject);
							else 
							{
								DeselectGameObjectsIfSelected ();
								GameObject SelectedObj = UnitGameObject.transform.Find ("Selected").gameObject;
								SelectedObj.active = true;
								CurrentlySelectedUnits.Add (UnitGameObject.gameObject);
								UnitGameObject.gameObject.GetComponent<Unit> ().Selected = true; //Need to show this
							}
						}

					} else {
						//If this object is not a unit
						if(!CTRLKeysDown())
							DeselectGameObjectsIfSelected ();
					}
				}
			

			}
	 
		} else {
			
			if (Input.GetMouseButtonDown (0) && DidUserClickLeftMouse(mouseDownPoint))
				if(!CTRLKeysDown())
					DeselectGameObjectsIfSelected ();
		}
	}

	void LateUpdate()
	{
		
	}

	#region Helper function

	//Is user dragging, relative to mouse drag start point
	public bool UserDraggingByPosition(Vector2 DragStartPoint, Vector2 NewPoint)
	{
		if(
			(NewPoint.x > DragStartPoint.x + clickDragZone || NewPoint.x < DragStartPoint.x - clickDragZone) ||
			(NewPoint.y > DragStartPoint.y + clickDragZone || NewPoint.y < DragStartPoint.y - clickDragZone) 
			)
			return true;
		else
			return false;
	}

	//Check if a user clicked mouse
	public bool DidUserClickLeftMouse(Vector3 hitPoint)
	{

		 if(
			(mouseDownPoint.x < hitPoint.x + clickDragZone && mouseDownPoint.x > hitPoint.x - clickDragZone) &&
			(mouseDownPoint.y < hitPoint.y + clickDragZone && mouseDownPoint.y > hitPoint.y - clickDragZone) &&
			(mouseDownPoint.z < hitPoint.z + clickDragZone && mouseDownPoint.z > hitPoint.z - clickDragZone)
			)
			return true; else return false;
	}

	//Deselects gameobject if selected
	public static void DeselectGameObjectsIfSelected()
	{
		if (CurrentlySelectedUnits.Count > 0) 
		{
			for (int i = 0; i < CurrentlySelectedUnits.Count; i++) 
			{
				GameObject ArrayListUnit = CurrentlySelectedUnits  *as GameObject;*
  •  		ArrayListUnit.transform.Find ("Selected").gameObject.active = false;*
    
  •  		ArrayListUnit.GetComponent<Unit> ().Selected = false;*
    
  •  	}*
    
  •  	CurrentlySelectedUnits.Clear();*
    
  •  }*
    
  • }*

  • //Check if a unit is already in the currently selected units arraylist*

  • public static bool UnitAlreadyInCurrentlySelectedUnits(GameObject Unit)*

  • {*

  •  if (CurrentlySelectedUnits.Count > 0) {*
    
  •  	for (int i = 0; i < CurrentlySelectedUnits.Count; i++) {*
    

_ GameObject ArrayListUnit = CurrentlySelectedUnits as GameObject;_
* if (ArrayListUnit == Unit)*
* return true;*
* }*

* return false;*
* } else*
* return false;*
* }*

* //Remove a unit from the currently selected units arraylist*
* public void RemoveUnitFromCurrentlySelectedUnits(GameObject Unit)*
* {*
* if (CurrentlySelectedUnits.Count > 0) {*
* for (int i = 0; i < CurrentlySelectedUnits.Count; i++) {*
_ GameObject ArrayListUnit = CurrentlySelectedUnits as GameObject;
* if (ArrayListUnit == Unit)
{
CurrentlySelectedUnits.RemoveAt (i);
ArrayListUnit.transform.Find (“Selected”).gameObject.active = false;
}
}*_

* return;*
* } else*
* return;*
* }*

* //Are the control keys being held dowN?*
* public static bool CTRLKeysDown()*
* {*
* if (Input.GetKey(KeyCode.LeftControl))*
* return true;*
* else*
* return false;*
* }*

* //Check if a unit is within screen space to deal with mouse drag selection*
* public static bool UnitWithinScreenSpace(Vector2 UnitScreenPos)*
* {*
* if(*
* (UnitScreenPos.x < Screen.width && UnitScreenPos.y < Screen.height) &&*
* (UnitScreenPos.x > 0f && UnitScreenPos.y > 0f)*
* )*
* return true;*
* else*
* return false;*
* }*

* //Remove unit from screen units UnitsOnScreen arraylist*
* public static void RemoveFromOnScreenUnits(GameObject Unit)*
* {*
* for (int i = 0; i < UnitsOnScreen.Count; i++) {*
_ GameObject UnitObj = UnitsOnScreen as GameObject;
* if (Unit == UnitObj) {
UnitsOnScreen.RemoveAt (i);
UnitObj.GetComponent ().OnScreen = false;
return;
}*_

* return;*
* }*
* }*
* #endregion *
}

Simple, GameObject SelectedObj = UnitGameObject.Find("Selected"); is null
so doing .gameObject on it returns your null reference exception.

It seems like Selected doesn’t exist.