- Home /
Set limits for camera to other axis 2D
So right now the camera follows the 2D player as I need him to, but I can't get it to stop at other places. Right now it stops when you reach -1 on the y axis and I'd need it for both sides of the x axis and the other side of the y. If you could help me out that would be great. Thanks!
 using UnityEngine;
 using System.Collections;
 
 public class Camera2DFollow : MonoBehaviour {
     
     public Transform target;
     public float damping = 1;
     public float lookAheadFactor = 3;
     public float lookAheadReturnSpeed = 0.5f;
     public float lookAheadMoveThreshold = 0.1f;
     public float yPosRestriction = -1; //Stops the camera to follow at -1 
 
     
     float offsetZ;
     Vector3 lastTargetPosition;
     Vector3 currentVelocity;
     Vector3 lookAheadPos;
     
     float nextTimeToSearch = 0;
     
     // Use this for initialization
     void Start () {
         lastTargetPosition = target.position;
         offsetZ = (transform.position - target.position).z;
         transform.parent = null;
     }
     
     // Update is called once per frame
     void Update () {
         
         if (target == null) {
             FindPlayer ();
             return;
         }
         
         // only update lookahead pos if accelerating or changed direction
         float xMoveDelta = (target.position - lastTargetPosition).x;
         
         bool updateLookAheadTarget = Mathf.Abs(xMoveDelta) > lookAheadMoveThreshold;
         
         if (updateLookAheadTarget) {
             lookAheadPos = lookAheadFactor * Vector3.right * Mathf.Sign(xMoveDelta);
         } else {
             lookAheadPos = Vector3.MoveTowards(lookAheadPos, Vector3.zero, Time.deltaTime * lookAheadReturnSpeed);    
         }
         
         Vector3 aheadTargetPos = target.position + lookAheadPos + Vector3.forward * offsetZ;
         Vector3 newPos = Vector3.SmoothDamp(transform.position, aheadTargetPos, ref currentVelocity, damping);
         
         newPos = new Vector3 (newPos.x, Mathf.Clamp (newPos.y, yPosRestriction, Mathf.Infinity), newPos.z);
         
         transform.position = newPos;
 
         lastTargetPosition = target.position;        
     }
     
     void FindPlayer () {
         if (nextTimeToSearch <= Time.time) {
             GameObject searchResult = GameObject.FindGameObjectWithTag ("Player");
             if (searchResult != null)
                 target = searchResult.transform;
             nextTimeToSearch = Time.time + 0.5f;
         }
     }
 }
 
Answer by PavleM · Nov 26, 2014 at 10:19 PM
This line is the one you want to change:
      newPos = new Vector3 (newPos.x, Mathf.Clamp (newPos.y, yPosRestriction, Mathf.Infinity), newPos.z);
What that is doing is using Mathf.Clamp to clamp the y of the vector between yPosRestriction and Mathf.Infinity.
you want something like this:
      newPos = new Vector3 (Mathf.Clamp(newPos.x, MinXPosRestriction, MaxXPosRestriction), Mathf.Clamp (newPos.y, MinYPosRestriction, MaxYPosRestriction), newPos.z);
where MinXPosRestriction, MaxXPosRestriction, MinYPosRestriction and MaxYPosRestriction are variables you'll have to define!
Your answer
 
 
             Follow this Question
Related Questions
2D Camera follow player up but not down 1 Answer
i want the camera stop follwing my player only on y axis when he jumps... 4 Answers
How to move object side to side of screen width 0 Answers
How do I find another prefab based off a numerical variable? [2D, C#] 0 Answers
Lock main camera on x-axis 2 Answers
 koobas.hobune.stream
koobas.hobune.stream 
                       
                
                       
			     
			 
                