Follower camera looking from frontside to a character
I used a smoothfollow script and try to set it up, so the camera is in front of the object looking at it, by changing the distance to -3, but it flickers between front and back and is not usable. Any idea why this does not work like I want ?
// Smooth Follow from Standard Assets
using UnityEngine;
using System.Collections;
public class smoothFollow : MonoBehaviour {
// The target we are following
public Transform target;
// The distance in the x-z plane to the target
public float distance = -3.0f;
// the height we want the camera to be above the target
public float height = 1.0f;
// How much we
public float heightDamping = 1.0f;
public float rotationDamping = 3.0f;
// Place the script in the Camera-Control group in the component menu
[AddComponentMenu("Camera-Control/XXXSmoothFollow")]
void LateUpdate() {
// Early out if we don't have a target
if (!target)
return;
// Calculate the current rotation angles
float wantedRotationAngle = target.eulerAngles.y;
float wantedHeight = target.position.y + height;
float currentRotationAngle = transform.eulerAngles.y;
float currentHeight = transform.position.y;
// Damp the rotation around the y-axis
currentRotationAngle = Mathf.LerpAngle(currentRotationAngle, wantedRotationAngle, rotationDamping * Time.deltaTime);
// Damp the height
currentHeight = Mathf.Lerp(currentHeight, wantedHeight, heightDamping * Time.deltaTime);
// Convert the angle into a rotation
var currentRotation = Quaternion.Euler(0, currentRotationAngle, 0);
// Set the position of the camera on the x-z plane to:
// distance meters behind the target
transform.position = target.position;
transform.position -= currentRotation * Vector3.forward * distance;
// Set the height of the camera
transform.position = new Vector3(transform.position.x, currentHeight, transform.position.z);
// Always look at the target
transform.LookAt(target);
}
}
Answer by SpaceManDan · Oct 06, 2019 at 05:30 PM
Use this script instead. http://wiki.unity3d.com/index.php/SmoothFollow2
Move the target into the public field, hit play and then toggle the followBehind checkbox. It will switch between front and back.
public Transform target;
public float distance = 3.0f;
public float height = 3.0f;
public float damping = 5.0f;
public bool smoothRotation = true;
public bool followBehind = false;
public float rotationDamping = 10.0f;
void LateUpdate()
{
target.transform.position = new Vector3(target.transform.position.x, target.transform.position.y, target.transform.position.z + Time.deltaTime);
Vector3 wantedPosition;
if (followBehind)
wantedPosition = target.TransformPoint(0, height, -distance);
else
wantedPosition = target.TransformPoint(0, height, distance);
transform.position = Vector3.Lerp(transform.position, wantedPosition, Time.deltaTime * damping);
if (smoothRotation)
{
Quaternion wantedRotation = Quaternion.LookRotation(target.position - transform.position, target.up);
transform.rotation = Quaternion.Slerp(transform.rotation, wantedRotation, Time.deltaTime * rotationDamping);
}
else transform.LookAt(target, target.up);
}
Answer by klobbi1212 · Oct 06, 2019 at 06:00 PM
thx, I will try, but since I am beginner, i didnt know about cinemachine. may this is what i need?
Your answer
Follow this Question
Related Questions
Why is my camera rolling around like a ball? 3 Answers
When attaching my custom camera script camera shakes when player starts to move fast. 0 Answers
Problem with camera loading different scenes 0 Answers
Help modifying code for a spaceship,How do I change the camera following settings on this script? 0 Answers
Cinematic 2d platformer camera move,2d Camera Movement Player Cinematic 0 Answers