- Home /
How can I get my camera to only follow my player down along the Y axis?
Hello Unity family,
Real quick. I'm making a 2D game where my player is moving downwards along the Y-axis. Nothing brings the player back up so I would like to lock my camera on the player. When my player jumps, the camera follows which is basically what i'm trying to prevent but I cant seem to find an "easy" solution for this. Thanks in advance if anyone can help me out!
Answer by Ruzihm · Dec 20, 2019 at 06:46 PM
Have the y component be the minimum of the current y position and the target's y position plus offset.
 public Transform target;
 public float Vector3 offset;
 void Update() 
 { 
     Vector3 targetPos = target.position;
     transform.position = new Vector3(
            targetPos.x + offset.x, 
            Mathf.Min(transform.position.y, targetPos.y + offset.y),
             targetPos.z + offset.z) ;
 }
Answer by tashfiq103 · Dec 19, 2019 at 01:09 AM
using UnityEngine;
[RequireComponent(typeof(Camera))] public class CameraFollow : MonoBehaviour { #region Public Variables
 //Value : Default Target of the camera when the game started
 public Transform defaultTargetReference;
 public Vector3 cameraOffSet = Vector3.one;
 [Range(0f, 1f)]
 public float cameraFollowingVelocity = 0.1f;
 #endregion
 #region Private Variables
 private Transform m_TransformReference;
 //Value : The current target of the camera will always be stored in this variable, as we can change it through the runtime.
 private Transform m_CurrentTargetOfCamera;
 private Vector3 m_ModifiedPosition;
 #endregion
 #region Mono Behaviour
 private void Awake()
 {
     m_TransformReference = transform;
     //Initially, the current target of the camera is our default target which we set from the editor
     m_CurrentTargetOfCamera = defaultTargetReference;
 }
 private void LateUpdate()
 {
     //if : The current target of the camera is destroyed (Which you changed by calling the "ChangeCameraTarget()"), it will get back to its default target
     if (m_CurrentTargetOfCamera == null)
         m_CurrentTargetOfCamera = defaultTargetReference;
     //Calculating : Finding the new position of the camera considering the offset. for your case, I believe the offset would be (0,0,-10)
     //*************
     if (m_TransformReference.position.y > (m_CurrentTargetOfCamera.position.y + cameraOffSet.y))
     {
         m_ModifiedPosition = Vector3.Lerp(
                             m_TransformReference.position,
                             m_CurrentTargetOfCamera.position + cameraOffSet,
                             cameraFollowingVelocity
                         );
         //Assigning : the changed position
         m_TransformReference.position = m_ModifiedPosition;
     }
 }
 #endregion
 #region Public Callback
 /// <summary>
 /// Use this function to change the camera target in runtime.
 /// </summary>
 /// <param name="t_CameraTarget"></param>
 public void ChangeCameraTarget(Transform t_CameraTarget)
 {
     m_CurrentTargetOfCamera = t_CameraTarget;
 }
 #endregion
}
Hey thanks for the reply, I can't seem to get this code to work though.
The code format not getting fixed. You can try this link : https://paste.ubuntu.com/p/NDNs5xrn96/ @EvanCheddar
Your answer
 
 
             Follow this Question
Related Questions
Load Scene on Either Edge of Camera Collision 2 Answers
How to stop camera in a 2D game in a certain coordinate.x? 1 Answer
Smooth 2D Brawler Camera 0 Answers
Top Down Camera? 0 Answers
 koobas.hobune.stream
koobas.hobune.stream 
                       
               
 
			 
                