- Home /
 
How to lock the y axis in camera script?
Need help with locking the y axis to 1 (camera script) in a 2D game. At the moment it is set to 1 but when my character jumps over 1 the camera moves up when he gets over 1.
 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;
     
     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 ahmedbenlakhdhar · Dec 12, 2014 at 08:53 PM
Try to overwrite the modified value of the camera's Y axis position, by setting it to 1 in the end of Update.
 transform.position = new Vector3(transform.position.x, 1, transform.position.z);
 
              Answer by osamarana · Aug 11, 2015 at 01:43 PM
You can emit ray cast from object that is your player . And follow camera at the hit point . Hit point should be ground . Now whenever your player jumps the hit point stays on ground .
 RaycastHit2D hit = Physics2D.Raycast (player.transform.position, Vector2.down, Mathf.Infinity, 1 << LayerMask.NameToLayer ("Ground"));
         Vector3 pos = new Vector3 (hit.point.x + xOffset, hit.point.y + yOffset , -10);
         transform.position= pos;
         }
 
              Your answer
 
             Follow this Question
Related Questions
Lock the Camera's Y Rotation Axis? 0 Answers
Lock the y axis (on an object that's not a rigid body) c# 0 Answers
Y Axis Limit 2 Answers
Rotating an object around Z axis using Lerp 2 Answers
spin only on one axis 1 Answer