Skip to content

Instantly share code, notes, and snippets.

@Hamcha
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
transform.LookAt(target);
}
}
@b0o0d
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.

@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

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

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

@ShadowFox3126
Copy link

why does my camera view swivels?

@peter-dolkens
Copy link

@SpecOps167 - so edgy!

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

@jeanfbrito
Copy link

Works like a charm in 2017, thanks!

@RobertSibek
Copy link

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

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

@pizishusheng
Copy link

when target rotate, the camera is shaking. why?

@MuhammadAhmadAmeen
Copy link

Best, Thanks :D

@koningkaas
Copy link

Absolute perfection, much appreciated!

@gkagm2
Copy link

gkagm2 commented Apr 13, 2019

Thanks!

@nafis-sadik
Copy link

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

@jeffgoin
Copy link

Nicely done. Thanks -- worked better than mine.

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

@digimbyte
Copy link

no it doesnt dumbass

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

@AdyStudios
Copy link

Thanks!

@aidswidjaja
Copy link

no it doesnt dumbass

r/confidentlyincorrect

@LeonieMagnusson
Copy link

this works:) thank you so much!

@Prithwis-2023
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