SmoothFollow2

Author: Daniel

Improved Version

Author: Vasilis Christopoulos & Daniel Toliaferro

Description
This is designed to make a camera smoothly follow a ship in space.

Usage
Place this script onto a camera.

JavaScript - SmoothFollow2.js
var target : Transform; var distance = 3.0; var height = 3.0; var damping = 5.0; var smoothRotation = true; var rotationDamping = 10.0; function Update { var wantedPosition = target.TransformPoint(0, height, -distance); transform.position = Vector3.Lerp (transform.position, wantedPosition, Time.deltaTime * damping); if (smoothRotation) { var wantedRotation = Quaternion.LookRotation(target.position - transform.position, target.up); transform.rotation = Quaternion.Slerp (transform.rotation, wantedRotation, Time.deltaTime * rotationDamping); } 	else transform.LookAt (target, target.up); }

C# - SmoothFollow2.cs
using UnityEngine; using System.Collections; public class SmoothFollow2 : MonoBehaviour { public Transform target; public float distance = 3.0f; public float height = 3.0f; public float damping = 5.0f; public bool smoothRotation = true; public float rotationDamping = 10.0f; void Update { Vector3 wantedPosition = target.TransformPoint(0, height, -distance); transform.position = Vector3.Lerp (transform.position, wantedPosition, Time.deltaTime * damping); if (smoothRotation) { Quaternion wantedRotation = Quaternion.LookRotation(target.position - transform.position, target.up); transform.rotation = Quaternion.Slerp (transform.rotation, wantedRotation, Time.deltaTime * rotationDamping); } 		else transform.LookAt (target, target.up); } }

C# - SmoothFollow2.cs (Improved)
using UnityEngine; using System.Collections; public class SmoothFollow2 : MonoBehaviour { public Transform target; public float distance = 3.0f; public float height = 3.0f; public float damping = 5.0f; public bool smoothRotation = true; public bool followBehind = true; public float rotationDamping = 10.0f; void Update { Vector3 wantedPosition; if(followBehind) wantedPosition = target.TransformPoint(0, height, -distance); else wantedPosition = target.TransformPoint(0, height, distance); transform.position = Vector3.Lerp (transform.position, wantedPosition, Time.deltaTime * damping); if (smoothRotation) { Quaternion wantedRotation = Quaternion.LookRotation(target.position - transform.position, target.up); transform.rotation = Quaternion.Slerp (transform.rotation, wantedRotation, Time.deltaTime * rotationDamping); }               else transform.LookAt (target, target.up); } }