- Home /
2D Platformer Camera [Solved]
I'm using the camera script from the Unity Projects: 2D Platformer Asset package as a frame work for my camera however when I start the game the camera does not follow the player and returns an error:
NullReferenceException: Object reference not set to an instance of an object CameraFollow.Awake () (at Assets/Scripts/CameraFollow.cs:20)
which if I'm reading it right is referencing line 20
player = GameObject.FindGameObjectWithTag("Player").transform;
However I've changed the player's tag to Player and have even tried creating a new tag and editing the script to match the new tag with no change in behavior. Can anyone point me in the right direction to get this working?
Full Camera 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);
}
}
Are you absolutely sure you tagged your player with 'Player' with an upper case 'P'? Note the code expects the the tag to be 'Player', not the name.
Yup absolutely sure that player is tagged as 'Player' and even went so far as to rename the asset as 'Player' as well making sure that they were capitalized.
Try to use player = GameObject.FindWithTag("Player").transform; ins$$anonymous$$d maybe?
That stopped the error from co$$anonymous$$g up however the camera is not following the player still.
$$anonymous$$aybe try to change all 'transform.position' to 'this.transform.position'. Nothing else is going to my $$anonymous$$d. And very obvious question, did you attached this script to Camera? (I must be sure of that xD)
Your answer
![](https://koobas.hobune.stream/wayback/20220613130308im_/https://answers.unity.com/themes/thub/images/avi.jpg)
Follow this Question
Related Questions
Unity 4.3 - 2D - Velocity based on rotation 1 Answer
Unity 4.3 - 2D demo - question about jumpForce 3 Answers
Play animation from script in Unity 4.3 0 Answers
How Do I Animate a Sprite in 4.3? 1 Answer
Problem with lights in 4.3 1 Answer