How to make third person camera were the player walks in the direction in which the camera is directed

When i start the game the camera is facing the player but then when I press the W key my player walks backwards and same goes for A,S,D they do the opposite. Don’t know what I did wrong with the scripts.

Script 1/ MouseOrbit.js:

var xSpeed = 250.0;
var ySpeed = 120.0;

var yMinLimit = -20;
var yMaxLimit = 80;

private var x = 0.0;
private var y = 0.0;


@script AddComponentMenu("Camera-Control/Mouse Orbit")

function Start () {
    var angles = transform.eulerAngles;
    x = angles.y;
    y = angles.x;

// Make the rigid body not change rotation
if (GetComponent.<Rigidbody>())
	GetComponent.<Rigidbody>().freezeRotation = true;
}

function Update () {
distance = Raycast3.distance3;

if(distance > 2){
distance = 0.8;

if(( Input.GetKey(KeyCode.A)) || ( Input.GetKey(KeyCode.LeftArrow))) {
x -= 3; //The higher the number the faster the camera rotation
}
if(( Input.GetKey(KeyCode.D)) || ( Input.GetKey(KeyCode.RightArrow))) {
x += 3; 
}

}

}



function LateUpdate () {
    if (target) {
        x += Input.GetAxis("Mouse X") * xSpeed * 0.02;
        y -= Input.GetAxis("Mouse Y") * ySpeed * 0.02;
 		
 		y = ClampAngle(y, yMinLimit, yMaxLimit);
 		       
        var rotation = Quaternion.Euler(y, x, 0);
        var position = rotation * Vector3(0.0, 0.0, -distance) + target.position;
        
        transform.rotation = rotation;
        transform.position = position;
    }
}


static function ClampAngle (angle : float, min : float, max : float) {
	if (angle < -360)
		angle += 360;
	if (angle > 360)
		angle -= 360;
	return Mathf.Clamp (angle, min, max);
}

Script 2/ Raycast3.js:

static var distance3 : float = 5;


function Update () {


var hit: RaycastHit;
if( Physics.Raycast(transform.position,transform.TransformDirection(Vector3.forward),hit)){
distance3 = hit.distance;

}
}


Script 3/ Lookatcamera.js:

var target : Transform; 

function Update() {
transform.LookAt(target);
}

I watched this tutorial: [TUTORIAL] 3rd Person Dynamic Camera | Unity3D - YouTube

try this maybe for an Orbit camera. I know it works so if you still have the same problem then check your input settings - maybe pos and neg are swapped or try changing the pos and negs in the script. I don’t know, i didn’t really look at your script. but maybe compare to the one below and maybe spot some differences. this came from a scripting pack that I don’t use. I just use the FPS and TPS cameras

using UnityEngine;
using System.Collections;

public class OrbitCamera : MonoBehaviour {
	/* These variables are what tell the camera how its going to function by
	 * setting the viewing target, collision layers, and other properties
	 * such as distance and viewing angles */
	public Transform viewTarget;
	public LayerMask collisionLayers;
	public float distance = 6.0f;
	public float distanceSpeed = 150.0f;
	public float collisionOffset = 0.3f;
	public float minDistance = 4.0f;
	public float maxDistance = 12.0f;
	public float height = 1.5f;
	public float horizontalRotationSpeed = 250.0f;
	public float verticalRotationSpeed = 150.0f;
	public float rotationDampening = 0.75f;
	public float minVerticalAngle = -60.0f;
	public float maxVerticalAngle = 60.0f;
	public bool useRMBToAim = false;

	/* These variables are meant to store values given by the script and
	 * not the user */
	private float h, v, newDistance, smoothDistance;
	private Vector3 newPosition;
	private Quaternion newRotation, smoothRotation;
	private Transform cameraTransform;

	/* This is where we initialize our script */
	void Start () {
		Initialize ();
	}

	/* This is where we set our private variables, check for null errors,
	 * and anything else that needs to be called once during startup */
	void Initialize () {
		h = this.transform.eulerAngles.x;
		v = this.transform.eulerAngles.y;

		cameraTransform = this.transform;
		smoothDistance = distance;

		NullErrorCheck ();
	}

	/* We check for null errors or warnings and notify the user to fix them */
	void NullErrorCheck () {
		if (!viewTarget) {
			Debug.LogError("Please make sure to assign a view target!");
			Debug.Break ();
		}
		if (collisionLayers == 0) {
			Debug.LogWarning("Make sure to set the collision layers to the layers the camera should collide with!");
		}
	}

	/* This is where we do all our camera updates. This is where the camera
	 * gets all of its functionality. From setting the position and rotation,
	 * to adjusting the camera to avoid geometry clipping */
	void LateUpdate () {
		if (!viewTarget)
			return;

		/* We check for right mouse button functionality, set the rotation
		 * angles, and lock the mouse cursor */
		if (!useRMBToAim) {
			/* Check to make sure the game isn't paused and lock the mouse cursor*/
			if (Time.timeScale > 0.0f)
				Screen.lockCursor = true;
			
			h += Input.GetAxis ("Mouse X") * horizontalRotationSpeed * Time.deltaTime;
			v -= Input.GetAxis ("Mouse Y") * verticalRotationSpeed * Time.deltaTime;

			h = ClampAngle (h, -360.0f, 360.0f);
			v = ClampAngle (v, minVerticalAngle, maxVerticalAngle);

			newRotation = Quaternion.Euler(v, h, 0.0f);
		} else {
			if(Input.GetMouseButton(1)) {
				/* Check to make sure the game isn't paused and lock the mouse cursor */
				if (Time.timeScale > 0.0f)
					Screen.lockCursor = true;

				h += Input.GetAxis ("Mouse X") * horizontalRotationSpeed * Time.deltaTime;
				v -= Input.GetAxis ("Mouse Y") * verticalRotationSpeed * Time.deltaTime;

				h = ClampAngle (h, -360.0f, 360.0f);
				v = ClampAngle (v, minVerticalAngle, maxVerticalAngle);

				newRotation = Quaternion.Euler(v, h, 0.0f);
			} else {
				Screen.lockCursor = false;
			}
		}

		/* We set the distance by moving the mouse wheel and use a custom
		 * growth function as the time value for linear interpolation */
		distance = Mathf.Clamp (distance - Input.GetAxis ("Mouse ScrollWheel") * 10, minDistance, maxDistance);
		smoothDistance = Mathf.Lerp (smoothDistance, distance, TimeSignature(distanceSpeed));

		/*We give the rotation some smoothing for a nicer effect */
		smoothRotation = Quaternion.Slerp (smoothRotation, newRotation, TimeSignature((1 / rotationDampening) * 100.0f));

		newPosition = viewTarget.position;
		newPosition += smoothRotation * new Vector3(0.0f, height, -smoothDistance);

		/* Calls the function to adjust the camera position to avoid clipping */
		CheckSphere ();

		smoothRotation.eulerAngles = new Vector3 (smoothRotation.eulerAngles.x, smoothRotation.eulerAngles.y, 0.0f);

		cameraTransform.position = newPosition;
		cameraTransform.rotation = smoothRotation;
	}

	/* This is where the camera checks for a collsion hit within a specified radius,
	 * and then moves the camera above the location it hit with an offset value */
	void CheckSphere () {
		/* Add height to our spherecast origin */
		Vector3 tmpVect = viewTarget.position;
		tmpVect.y += height;
		
		RaycastHit hit;

		/* Get the direction from the camera position to the origin */
		Vector3 dir = (newPosition - tmpVect).normalized;

		/* Check a radius for collision hits and then set the new position for
		 * the camera */
		if(Physics.SphereCast(tmpVect, 0.3f, dir, out hit, distance, collisionLayers)) {
			newPosition = hit.point + (hit.normal * collisionOffset);
		}
	}

	/* Keeps the angles values within their specificed minimum and maximum
	 * inputs while at the same time putting the values back to 0 if they 
	 * go outside of the 360 degree range */
	private float ClampAngle (float angle, float min, float max) {
		if(angle < -360)
			angle += 360;
		
		if(angle > 360) 
			angle -= 360;
		
		return Mathf.Clamp (angle, min, max);
	}
	
	/* This is our custom logistic growth time signature with speed as input */
	private float TimeSignature(float speed) {
		return 1.0f / (1.0f + 80.0f * Mathf.Exp(-speed * 0.02f));
	}
}

@shadowpuppet
I changed the settings in the input settings but then when I turn the camera at the other side then I get the same problem so I need somehow make that the character turns when the camera turns, I will look into the script and see if it solves the problem. thanks