camera not working after scripting player state

i got tuorial on youtube channel stevie rof Third Person Shooter E23: Player States - YouTube in this episode make me struggle spend long time a day.

script execution order is correct like stevie order

error ;
NullReferenceException: Object reference not set to an instance of an object
ThirdPersonCamera.Update () (at Assets/Team9/Scripts/Cameras/ThirdPersonCamera.cs:48)

line of error:
if (localPlayer.PlayerState.WeaponState == PlayerState.EWeaponState.AIMING || localPlayer.PlayerState.WeaponState == PlayerState.EWeaponState.AIMFIRING)
cameraRig = aimCamera;

alt text

here is the code of camera

using System.Collections;
using UnityEngine;

public class ThirdPersonCamera : MonoBehaviour {

	[System.Serializable]
	public class CameraRig
	{
		public Vector3 CameraOffset;
		public float Damping;
	}

	//0.53, 0.39, -5.8
	//5

	[SerializeField]
	CameraRig defaultCamera;

	[SerializeField]
	CameraRig aimCamera;

	Transform cameraLookTarget;
	Player localPlayer;



	void Awake () {
		GameManager.Instance.OnLocalPlayerJoined += HandleOnLocalPlayerJoined;;
	}

	void HandleOnLocalPlayerJoined (Player player)
	{
		localPlayer = player;
		cameraLookTarget = localPlayer.transform.Find("cameraLookTarget");

		if (cameraLookTarget == null)
			cameraLookTarget = localPlayer.transform;
	}
	
	// Update is called once per frame
	void Update () {

		if (localPlayer == null)
			return;

		CameraRig cameraRig = defaultCamera;

		if (localPlayer.PlayerState.WeaponState == PlayerState.EWeaponState.AIMING || localPlayer.PlayerState.WeaponState == PlayerState.EWeaponState.AIMFIRING)
			cameraRig = aimCamera;

		Vector3 targetPosition = cameraLookTarget.position + localPlayer.transform.forward * cameraRig.CameraOffset.z +
		                         localPlayer.transform.up * cameraRig.CameraOffset.y +
		                         localPlayer.transform.right * cameraRig.CameraOffset.x;

		Quaternion targetRotation = Quaternion.LookRotation (cameraLookTarget.position - targetPosition, Vector3.up);

		transform.position = Vector3.Lerp (transform.position, targetPosition, cameraRig.Damping * Time.deltaTime);
		transform.rotation = Quaternion.Lerp (transform.rotation, targetRotation, cameraRig.Damping * Time.deltaTime);
		}
}

using UnityEngine;
using System.Collections;

public class ThirdPersonCamera : MonoBehaviour {

//usaremos duas cameras, uma para a default, outra para a camera de mirar.  
[System.Serializable]	//não mostrar no inspector
public class CameraRig {
	public Vector3 cameraOffSet;
	public float crouchHeight;
	public float damping;
}

[SerializeField]public CameraRig defaultCamera;
[SerializeField]public CameraRig aimCamera;
//[SerializeField]public CameraRig crouchedCamera;

	Transform cameraLookTarget;

Player localPlayer;
// Use this for initialization
void Awake () {
	GameManager.Instance.OnLocalPLayerJoined += HandleOnLocalPlayerJoined;

}
void HandleOnLocalPlayerJoined(Player player)
{
	localPlayer = player;
	cameraLookTarget = localPlayer.transform.Find("cameraLookTarget");

	if (cameraLookTarget == null)
		cameraLookTarget = localPlayer.transform;
}

// Update is called once per frame
void LateUpdate () {
	//lateUpdate para evitar alguns lags na camera... 
	if (localPlayer == null)
		return;
		
	CameraRig cameraRig = defaultCamera;
	//print ("cameraRig"+cameraRig);

	if (localPlayer.PlayerState.WeaponState == PlayerState.EWeaponState.AIMING || localPlayer.PlayerState.WeaponState == PlayerState.EWeaponState.AIMEDFIRING)
		cameraRig = aimCamera;

	//se esta crouching fica true ;
	float targetHeight = cameraRig.cameraOffSet.y + (localPlayer.PlayerState.MoveState == PlayerState.EMoveState.CROUCHING ? cameraRig.crouchHeight : 0);
	//quando muda a camera pra crouch, adicionamos
	Vector3 targetPosition = cameraLookTarget.position + localPlayer.transform.forward * cameraRig.cameraOffSet.z +
		localPlayer.transform.up *  targetHeight  +
		localPlayer.transform.right * cameraRig.cameraOffSet.x;
	
	Quaternion targetRotation = Quaternion.LookRotation (cameraLookTarget.position - targetPosition, Vector3.up);

	transform.position = Vector3.Lerp(transform.position, targetPosition, cameraRig.damping * Time.deltaTime);
	transform.rotation = Quaternion.Lerp(transform.rotation, targetRotation, cameraRig.damping * Time.deltaTime);
}

}