Skip to content

Instantly share code, notes, and snippets.

@Hamcha
Created July 28, 2013 00:45
Show Gist options
  • Star 47 You must be signed in to star a gist
  • Fork 7 You must be signed in to fork a gist
  • 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);
}
}
@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!

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