I am trying to create a third person camera script. I have it to where it works exactly how I want it to, except that it clips through terrain. How can I modify my script to smoothly move the camera forward along the ground towards the character and smoothly zoom back out when moving the camera away from the ground?
This is what I have so far:
public GameObject character;
public float minCameraDistance = 2.0f;
public float maxCameraDistance = 20.0f;
public float maxCameraAngle = 160.0f;
public float minCameraAngle = -160.0f;
public float cameraVerticalOffset = 0;
private Vector3 cameraOrigin;
private float cameraDistance = 5.0f;
private float currentX = 0.0f;
private float currentY = 0.0f;
void Update()
{
// Target the camera to a position above the character
cameraOrigin = character.transform.position + new Vector3(0, cameraVerticalOffset, 0);
currentX += Input.GetAxis("Mouse X");
currentY += Input.GetAxis("Mouse Y");
currentY = Mathf.Clamp(currentY, minCameraAngle, maxCameraAngle);
}
void LateUpdate()
{
// Change the camera distance with the scroll wheel
cameraDistance = cameraDistance - Input.GetAxis("Mouse ScrollWheel") * 5;
cameraDistance = Mathf.Clamp(cameraDistance, minCameraDistance, maxCameraDistance);
// Make the camera follow the character at a position behind and slightly above it
Vector3 cameraPosition = new Vector3(0, (cameraDistance / 4), -cameraDistance);
Quaternion rotation = Quaternion.Euler(-currentY, currentX, 0);
this.transform.position = cameraOrigin + rotation * cameraPosition;
this.transform.LookAt(cameraOrigin);
}