moving the camera smoothly to players current position in unity
I'm trying to move the camera after the player is teleported to a new location so the camera pulls out from its current location and then moves in to the players new position in a smooth motion.
Ive tried the animation and it automatically moves in spite of me add a trigger to start the animation. I modelled it on a set of door animations i found online.
If anyone has any tips or knows of any tutorials that could help me i would be very grateful
it's in 3D, i need the camera to pull back and then move in a "U" shape arc to where the player has spawned/re-spawned to
I have a small routine that does this without an animation. $$anonymous$$aybe you can adjust it for your needs.
public IEnumerator FlyTo( Transform start, Transform end, float duration )
{
Vector3 start_position = start.position;
Vector3 end_position = end.position;
float elapsed = 0;
while (elapsed < duration)
{
float v = elapsed / duration;
start.position = Vector3.Lerp( start_position, end_position, v * v * (3.0f - 2.0f * v) );
elapsed += Time.deltaTime;
yield return null;
}
start.position = end.position;
}
It must be called as a Coroutine.
Also this doesn't animate the rotation, just the position, but it should be easy to add that based on Quaternion.Lerp()
that 2nd lerp is a bit useless it will always return t
Answer by Imankit · Aug 27, 2016 at 09:23 AM
use this script on your camera. Its by far the best smooth follow script.
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 = 10.0f;
// the height we want the camera to be above the target
public float height = 5.0f;
// How much we
public float heightDamping = 2.0f;
public float rotationDamping = 3.0f;
// Place the script in the Camera-Control group in the component menu
[AddComponentMenu("Camera-Control/Smooth Follow")]
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 Nosmo · Aug 29, 2016 at 12:18 PM
thanks for the help, ill try both suggestions and see what is best for my needs
Your answer
Follow this Question
Related Questions
Camera flickers while chasing the player 0 Answers
Making a Smooth camera zoom with transform.Translate 1 Answer
Camera moves impossibly fast, and can't see any object 1 Answer
my movement doesn't work after adding "follow player" script to camera 0 Answers
How to Parent a Camera to the Head Bone with No Camera Shake? 0 Answers