Skip to content

Instantly share code, notes, and snippets.

Embed
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
transform.LookAt(target);
}
}
@huwr
Copy link

huwr commented Jul 4, 2015

Works okay for me, too.

@boBoSon
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.

@PeterRJW
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.

@quin3y
Copy link

quin3y commented Feb 19, 2016

Works like a charm for me. Thanks a lot!

@artemsmikh
Copy link

artemsmikh commented Jun 26, 2016

Very useful, thanks.

@yoat
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!

@clemens-tolboom
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.

@ShadowFox3126
Copy link

ShadowFox3126 commented Jan 26, 2017

why does my camera view swivels?

@peter-dolkens
Copy link

peter-dolkens commented Apr 9, 2017

@SpecOps167 - so edgy!

@cholasimmons
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"

@jeanfbrito
Copy link

jeanfbrito commented May 24, 2017

Works like a charm in 2017, thanks!

@RobertSibek
Copy link

RobertSibek commented Jun 3, 2017

Thanks, that's perfect.

@azertyalex
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

@cdunne1
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

@Shredsauce
Copy link

Shredsauce commented Aug 1, 2017

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

@pizishusheng
Copy link

pizishusheng commented Aug 24, 2017

when target rotate, the camera is shaking. why?

@MuhammadAhmadAmeen
Copy link

MuhammadAhmadAmeen commented Aug 17, 2018

Best, Thanks :D

@koningkaas
Copy link

koningkaas commented Oct 24, 2018

Absolute perfection, much appreciated!

@gkagm2
Copy link

gkagm2 commented Apr 13, 2019

Thanks!

@nafis-sadik
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.

@jeffgoin
Copy link

jeffgoin commented Aug 27, 2019

Nicely done. Thanks -- worked better than mine.

@matthiaszarzecki
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

@digimbyte
Copy link

digimbyte commented Nov 22, 2020

no it doesnt dumbass

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

@AdyStudios
Copy link

AdyStudios commented Sep 26, 2021

Thanks!

@aidswidjaja
Copy link

aidswidjaja commented Oct 2, 2021

no it doesnt dumbass

r/confidentlyincorrect

@LeonieMagnusson
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