Today we are going to look at setting up a camera follow script with screen clamping.
We want the camera to follow our character throughout the scene.
We also want to be able to control the camera so that it doesn’t go off or show an edge of the game that we do not desire it to.
I’ve went ahead and created a tile platform that is much wider than our camera view to demonstrate camera follow and the clamping.
Here is the script used in the above video.
using UnityEngine;
using System.Collections;
public class FollowTarget: MonoBehaviour
{
//what we are following
public Transform target;
//zeros out the velocity
Vector3 velocity = Vector3.zero;
//time to follow target
public float smoothTime = .15f;
//enable and set maximum Y value
public bool YMaxEnabled = false;
public float YMaxValue = 0f;
//enable and set min Y value
public bool YMinEnabled = false;
public float YMinValue = 0f;
//enable and set X max vlaue
public bool XMaxEnabled = false;
public float XMaxValue = 0f;
//enable and set X min value
public bool XMinEnabled = false;
public float XMinValue = 0f;
void FixedUpdate()
{
//target position
Vector3 targetPos = target.position;
//vertical
if (YMinEnabled && YMaxEnabled)
//for the targets Y position we'll clamp that position between the Y min and the Y max
targetPos.y = Mathf.Clamp(target.position.y, YMinValue, YMaxValue);
else if (YMinEnabled)
targetPos.y = Mathf.Clamp(target.position.y, YMinValue, target.position.y);
else if (YMaxEnabled)
targetPos.y = Mathf.Clamp(target.position.y, target.position.y, YMaxValue);
//horizontal
if (XMinEnabled && XMaxEnabled)
targetPos.x = Mathf.Clamp(target.position.x, XMinValue, XMaxValue);
else if (XMinEnabled)
targetPos.x = Mathf.Clamp(target.position.x, XMinValue, targetPos.x);
else if (XMaxEnabled)
targetPos.x = Mathf.Clamp(target.position.x, target.position.x, XMaxValue);
//align the camera and the targets z position
targetPos.z = transform.position.z;
//using smooth damp we will gradually change the camera transform position to the target
position based on the cameras transforms velocity and our smooth time value
transform.position = Vector3.SmoothDamp(transform.position, targetPos, ref velocity, smoothTime);
}
}
great vid
LikeLike