Skip to content

Instantly share code, notes, and snippets.

What would you like to do?
Stupid Unity scripts : "Smooth Follow" from Standard Assets
// Smooth Follow from Standard Assets
// Converted to C# because I fucking hate UnityScript and it's inexistant C# interoperability
// If you have C# code and you want to edit SmoothFollow's vars ingame, use this instead.
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
Copy link

boBoSon commented Oct 5, 2015

thanks for your answer.
it's helpful.
I would also recommend others to refer to your answer to solve similar problem.

Copy link

PeterRJW commented Dec 5, 2015

Thanks very much. Excellent solution. I was working on my own solution. I'm a newbie to C#. Your solution is way better. Thanks for making it available to the public freely. Not many people would. You saved me many hours of work.

Copy link

quin3y commented Feb 19, 2016

Works like a charm for me. Thanks a lot!

Copy link

artemsmikh commented Jun 26, 2016

Very useful, thanks.

Copy link

yoat commented Nov 16, 2016

I was modifying the target object's transform in a FixedUpdate method, and as a result there was a juddering effect. To solve this, I declared currentRotationAngle, currentRotation, and currentHeight outside of LateUpdate and then moved lines 44-51 (above) out of LateUpdate and into FixedUpdate. Works great!

Copy link

clemens-tolboom commented Nov 30, 2016

My target is a sphere rolling around so its target.eulerAngles.y; rotates like madness. Doesn't work for me.

Copy link

ShadowFox3126 commented Jan 26, 2017

why does my camera view swivels?

Copy link

peter-dolkens commented Apr 9, 2017

@SpecOps167 - so edgy!

Copy link

cholasimmons commented May 17, 2017

The code works , but isn't as smooth as I hoped.
I was looking for a GTA style camera that "waits" for you to get a considerable distance before it "snaps into action"

Copy link

jeanfbrito commented May 24, 2017

Works like a charm in 2017, thanks!

Copy link

RobertSibek commented Jun 3, 2017

Thanks, that's perfect.

Copy link

azertyalex commented Jul 12, 2017

How do I set the target? I tried
void Start() { target = GameObject.FindGameObjectWithTag("Player").transform; }
But that doesn't work

Copy link

cdunne1 commented Jul 17, 2017

// Place the script in the Camera-Control group in the component menu
[AddComponentMenu("Camera-Control/Smooth Follow")]

Unsure what this means - can you do this in Unity5? I couldn't see a way of doing it in the Add Component Menu

Copy link

Shredsauce commented Aug 1, 2017

@azertyalex Drag the transform you'd like to follow onto "Target" in the inspector

Copy link

pizishusheng commented Aug 24, 2017

when target rotate, the camera is shaking. why?

Copy link

MuhammadAhmadAmeen commented Aug 17, 2018

Best, Thanks :D

Copy link

koningkaas commented Oct 24, 2018

Absolute perfection, much appreciated!

Copy link

gkagm2 commented Apr 13, 2019


Copy link

nafis-sadik commented May 23, 2019

It works fine and with all the comments it's easy to tweak according to your requirements.

Copy link

jeffgoin commented Aug 27, 2019

Nicely done. Thanks -- worked better than mine.

Copy link

matthiaszarzecki commented Jan 24, 2020

Sweet, thank you! :D I'm updating my old projects from before 2012 and the standard asset scripts not working is making this a lot difficult that it should be, thank you so much! <3

Copy link

digimbyte commented Nov 22, 2020

no it doesnt dumbass

5 years later, seems like the dumb ass was you.

Copy link

AdyStudios commented Sep 26, 2021


Copy link

aidswidjaja commented Oct 2, 2021

no it doesnt dumbass


Copy link

LeonieMagnusson commented Jan 19, 2022

this works:) thank you so much!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment