Question by 
               Hertex · Oct 10, 2018 at 10:28 PM · 
                cameracamera-movementcamera movementthird person controller  
              
 
              I need help with my third person camera raycast
Here is my code, the camera works correctly and follows the player as I want but the problem is with the raycast part, the camera get stuck on the objects and wont follow the player anymore until I move the mouse to rotate the camera. Hope someone can help me.
using System.Collections; using System.Collections.Generic; using UnityEngine;
public class TP_Camera : MonoBehaviour {
 public float minDistance = 5;
 public float maxDistance = 15;
 public float height = 7;
 public float orbitSpeed = 5;
 public float orbitSmooth = 0.05f;
 public float zoomStep = 5;
 private float xAngle = 0;
 private float hInput = 0;
 private float distance = 5;
 private Transform target;
 private Vector3 cameraPos = Vector3.zero;
 private Quaternion rotation;
 void Awake()
 {
     target = GameObject.Find("Player").transform;
     // cameraPos = new Vector3(target.position.x, target.position.y + height, target.position.z - 10);
     //transform.position = cameraPos;
 }
 
 void LateUpdate ()
 {
     hInput = Input.GetAxis("Mouse X");
     //if(Input.GetMouseButton(1))
         OrbitTarget();
     FollowTarget();
 }
 void OrbitTarget()
 {
     Vector3 angles = transform.eulerAngles;
     xAngle = angles.y;
     xAngle += hInput * orbitSpeed * distance * orbitSmooth;
     rotation = Quaternion.Euler(0, xAngle, 0);
 }
 void FollowTarget()
 {
     distance = Mathf.Clamp(distance - Input.GetAxis("Mouse ScrollWheel") * zoomStep, minDistance, maxDistance);
     //THE RAYCAST CODE///////////////////////////////////////////////////
     RaycastHit hit;
     if (Physics.Linecast(target.position, transform.position, out hit))
     {
         distance -= (hit.distance + 1);
     }
     ///////////////////////////////////////////////////////////////////////
     Vector3 negDistance = new Vector3(0, 0, -distance);
     cameraPos = rotation * negDistance + target.position + new Vector3(0, height, 0);
     if (distance > maxDistance)
         distance = maxDistance;
     transform.rotation = rotation;
     transform.position = cameraPos;
 }
 float ClampAngle(float angle)
 {
     if (angle < -360.0f)
         angle += 360.0f;
     if (angle > 360.0f)
         angle -= 360f;
     return Mathf.Clamp(angle, 0, 360);
 }
 float ClampAngle(float angle, float min, float max)
 {
     if (angle < -360.0f)
         angle += 360.0f;
     if (angle > 360.0f)
         angle -= 360f;
     return Mathf.Clamp(angle, min, max);
 }
 
               }
               Comment
              
 
               
              Your answer
 
             Follow this Question
Related Questions
How to set movement limit to Camera in a top-down 3D game 0 Answers
Touch camera movement isn't smooth on Android 0 Answers
Camera change targets when new object appears or Camera change targets by pressing a button 1 Answer
Camera bounds with zoomable camera 1 Answer
How to limit/Clamp RotateAround for camera movement? 0 Answers