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