Skip to content

Instantly share code, notes, and snippets.

Created July 28, 2013 00:45
Show Gist options
  • Save Hamcha/6096905 to your computer and use it in GitHub Desktop.
Save Hamcha/6096905 to your computer and use it in GitHub Desktop.
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

bindiry commented Sep 19, 2014

it works. thanks.

Copy link

no it doesnt dumbass

Copy link

huwr commented Jul 4, 2015

Works okay for me, too.

Copy link

b0o0d 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

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

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

Copy link

why does my camera view swivels?

Copy link

@SpecOps167 - so edgy!

Copy link

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

Works like a charm in 2017, thanks!

Copy link

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

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

Copy link

when target rotate, the camera is shaking. why?

Copy link

Best, Thanks :D

Copy link

Absolute perfection, much appreciated!

Copy link

gkagm2 commented Apr 13, 2019


Copy link

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

Copy link

Nicely done. Thanks -- worked better than mine.

Copy link

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

no it doesnt dumbass

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

Copy link


Copy link

no it doesnt dumbass


Copy link

this works:) thank you so much!

Copy link

It works perfectly! Thank you for sharing

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