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: https://www.youtube.com/watch?v=iEm88-SkyUM
Answer by shadowpuppet · Aug 15, 2016 at 06:35 PM
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));
     }
 }
 
 
              Answer by emir3100 · Aug 20, 2016 at 11:31 PM
@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
sounds more like a TPS camera. I think the purpose of an orbit cam is to circle around the player. a TPS camera moves the player with the camera
@ emir3100 sounds more like a TPS camera. I think the purpose of an orbit cam is to circle around the player. a TPS camera moves the player with the camera
Your answer
 
             Follow this Question
Related Questions
mouse orbit 0 Answers
Why does my transform.lookat not work? 1 Answer
Fixed Camera rotate to follow player 2 Answers