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