Object reference not set to an instance of an Object

using UnityEngine;
using System.Collections;

public class PlayerController : MonoBehaviour {

public GameObject playerObject;

public float walkSpeed = 2;
public float runSpeed = 6;
public float gravity = -12;
public float jumpHeight = 1;
[Range(0,1)]
public float airControlPercent;

public float turnSmoothTime = 0.2f;
float turnSmoothVelocity;

public float speedSmoothTime = 0.1f;
float speedSmoothVelocity;
float currentSpeed;
float velocityY;

Animator animator;
Transform cameraT;
CharacterController controller;

void Start () {
	animator = GetComponent<Animator> ();
	cameraT = Camera.main.transform;
	controller = GetComponent<CharacterController> ();
}

void Update () {
	// input
	Vector2 input = new Vector2 (Input.GetAxisRaw ("Horizontal"), Input.GetAxisRaw ("Vertical"));
	Vector2 inputDir = input.normalized;
	bool running = Input.GetKey (KeyCode.LeftShift);

	Move (inputDir, running);

	if (Input.GetKeyDown (KeyCode.Space)) {
		Jump ();
	}
	// animator
	float animationSpeedPercent = ((running) ? currentSpeed / runSpeed : currentSpeed / walkSpeed * .5f);
	animator.SetFloat ("speedPercent", animationSpeedPercent, speedSmoothTime, Time.deltaTime);

}

void Move(Vector2 inputDir, bool running) {
	if (inputDir != Vector2.zero) {
		float targetRotation = Mathf.Atan2 (inputDir.x, inputDir.y) * Mathf.Rad2Deg + cameraT.eulerAngles.y;
		transform.eulerAngles = Vector3.up * Mathf.SmoothDampAngle(transform.eulerAngles.y, targetRotation, ref turnSmoothVelocity, GetModifiedSmoothTime(turnSmoothTime));
	}
		
	float targetSpeed = ((running) ? runSpeed : walkSpeed) * inputDir.magnitude;
	currentSpeed = Mathf.SmoothDamp (currentSpeed, targetSpeed, ref speedSmoothVelocity, GetModifiedSmoothTime(speedSmoothTime));

	velocityY += Time.deltaTime * gravity;
	Vector3 velocity = transform.forward * currentSpeed + Vector3.up * velocityY;

	controller.Move (velocity * Time.deltaTime);
	currentSpeed = new Vector2 (controller.velocity.x, controller.velocity.z).magnitude;

	if (controller.isGrounded) {
		velocityY = 0;
	}

}

void Jump() {
	if (controller.isGrounded) {
		float jumpVelocity = Mathf.Sqrt (-2 * gravity * jumpHeight);
		velocityY = jumpVelocity;
	}
}

float GetModifiedSmoothTime(float smoothTime) {
	if (controller.isGrounded) {
		return smoothTime;
	}

	if (airControlPercent == 0) {
		return float.MaxValue;
	}
	return smoothTime / airControlPercent;
}

}

Whats the problem ? I can add the this code and it gave the error

It seems like your script isn’t finding the CharacterController component. Are you sure you have one attached to your object that the script is attached to?

One good error checking practice for scripts is to check to make sure that the component is actually found by the script.

controller = GetComponent<CharacterController>();

if (!controller) //Check for controller reference
{
     Debug.LogError("Didn't find CharacterController");
}