- Home /
The question is answered, right answer was accepted
2D Platformer Demo Camera Follow script doesn't follow player
Edit : So I got the MinX and Y to work(It limits my camera to where I want it) but the character still just runs offscreen either way. I think it has something to do with the XMargin and YMargin. Here are the values I currently have:
XMargin : 2
YMargin : 2
XSmooth : 2
YSmooth : 2
Max X : 10
Min X : -4
MaxY : 10
MInY : -2
Original Post
Hello I was trying to use the 2D Platformer "Camera Follow" script from Unity's Demo they released but it just doesn't follow the player when assigned to the camera. I set my values up to multiple different numbers and even tried the values in the unity demo but nothing. My player is tagged as "Player" and the script is on the mainCamera in my scene. Has anyone else had this problem and/or gotten it to work? This is the script:
using UnityEngine;
using System.Collections;
public class CameraFollow : MonoBehaviour
{
public float xMargin = 1f; // Distance in the x axis the player can move before the camera follows.
public float yMargin = 1f; // Distance in the y axis the player can move before the camera follows.
public float xSmooth = 8f; // How smoothly the camera catches up with it's target movement in the x axis.
public float ySmooth = 8f; // How smoothly the camera catches up with it's target movement in the y axis.
public Vector2 maxXAndY; // The maximum x and y coordinates the camera can have.
public Vector2 minXAndY; // The minimum x and y coordinates the camera can have.
private Transform player; // Reference to the player's transform.
void Awake ()
{
// Setting up the reference.
player = GameObject.FindGameObjectWithTag("Player").transform;
}
bool CheckXMargin()
{
// Returns true if the distance between the camera and the player in the x axis is greater than the x margin.
return Mathf.Abs(transform.position.x - player.position.x) > xMargin;
}
bool CheckYMargin()
{
// Returns true if the distance between the camera and the player in the y axis is greater than the y margin.
return Mathf.Abs(transform.position.y - player.position.y) > yMargin;
}
void FixedUpdate ()
{
TrackPlayer();
}
void TrackPlayer ()
{
// By default the target x and y coordinates of the camera are it's current x and y coordinates.
float targetX = transform.position.x;
float targetY = transform.position.y;
// If the player has moved beyond the x margin...
if(CheckXMargin())
// ... the target x coordinate should be a Lerp between the camera's current x position and the player's current x position.
targetX = Mathf.Lerp(transform.position.x, player.position.x, xSmooth * Time.deltaTime);
// If the player has moved beyond the y margin...
if(CheckYMargin())
// ... the target y coordinate should be a Lerp between the camera's current y position and the player's current y position.
targetY = Mathf.Lerp(transform.position.y, player.position.y, ySmooth * Time.deltaTime);
// The target x and y coordinates should not be larger than the maximum or smaller than the minimum.
targetX = Mathf.Clamp(targetX, minXAndY.x, maxXAndY.x);
targetY = Mathf.Clamp(targetY, minXAndY.y, maxXAndY.y);
// Set the camera's position to the target position with the same z component.
transform.position = new Vector3(targetX, targetY, transform.position.z);
}
}
Answer by serenefox · Mar 03, 2014 at 07:43 PM
So I had a bright idea to center my player to 0 in the x, and the fixed it for some reason(even though he was only off in x by -17) but now it works. I am pretty sure it wasn't the X min because i did try larger numbers (in negative), but i don't know. It still didn't track even when the player was on screen. But now that the player starts a 0 in the X (Y worked either way) it seems to work (for anyone else that gets confused about it).
Follow this Question
Related Questions
2d camera movement 1 Answer
Choppy camera follow. 1 Answer
Restricting camera to within areas. 2D Adventure Platformer 1 Answer
Improve smooth 2d side scroller camera to look more fluent 1 Answer
ScreenToWorldPoint not accurate 0 Answers