Adding to score after passing an instantiated object

I’m working on a project for school where I need to make a Flappy Bird clone. In my project, I spawn enemies at a certain interval with a random Y-value by instantiating an enemy prefab. I need to make it so that the player gets awarded 10 points when their character passes one of these prefab instances. I have no idea how to figure out how to check if the player’s x-position is greater than n number of the instances’ x-positions. So far I managed to get this:

    int score = 0;

    public Text scoreText;

    public GameObject player;
    GameObject[] enemy;
    bool[] passed;

	void Update () {
        enemy = GameObject.FindGameObjectsWithTag("Enemy");
        //Debug.Log("There are " + enemy.Length + " enemies.");
        for (int i = 0; i < enemy.Length; i++)
        {
            if (!passed*)*

{
if (player.transform.position.x > enemy*.transform.position.x)*
{
score = score + 10;
passed = true;
}
}
}
scoreText.text = "SCORE : " + score;
* }*
but this way doesn’t properly assign the instances into the enemy array. I get a null reference exception every frame. So, how can I check if the player is ahead of a certain number of enemies and add 10 points for each that they’ve passed?

@zackarhino

I mean you could use a list to get the enemies and you could calculate the distance an enemy is away so you can get it not just from the x direction but from all directions. When did flappy bird have enemies? lol

Well here is an example script so hopefully you can learn from it. Cheers Mate:

This will be our script that does all the calculations:

//A null list to contain enemies
List<Transform> enemies;

//Reference to our players score
ScoreManager playerScore;

//Tag to find all our enemies
public string EnemyTagToFind = "Enemy";

//Max distance enemy is allowed from player
public float maxDistanceFromPlayer = 10;

//Score to add after enemy exceeeds our max distance from player.
public int ScoreToAdd = 10;

void Start()
{
    //Make a new list for use later on
    enemies = new List<Transform>();

    //This will be the manager of the players score
    //We modify this score later
    playerScore = GetComponent<ScoreManager>();
}

void Update()
{
    //When an enemy is removed from the list because it is dead
    //This will say an error because it was modified
    //You can ignore that error
    //FindObjects(EnemyTagToFind);: Find Enemies based on the tag entered.
    FindObjects(EnemyTagToFind);

    //GetClosestEnemyDistance(enemies, maxDistanceFromPlayer);: Gets enemies
    //                                                          Distance and
    //                                                          Checks to see
    //                                                          if it is too far 
    //                                                          from maxDistanceFromPlayer
    GetClosestEnemyDistance(enemies, maxDistanceFromPlayer);
}

void FindObjects(string TagToFind)
{
    if (enemies.Count < (GameObject.FindGameObjectsWithTag(TagToFind)).Length)
    {
        //Loops through all the enemies with this tag
        for (int i = 0; i < GameObject.FindGameObjectsWithTag(TagToFind).Length; i++)
        {
            //Gets all of the enemy transform with the tag
            if (enemies.Count < 0 || enemies == null)
            {
                //Adds them to our list
                enemies.Add((GameObject.FindGameObjectsWithTag(TagToFind))*.transform);*

}
else
{
if (!(enemies.Contains((GameObject.FindGameObjectsWithTag(TagToFind)).transform)))
{
//Adds them to our list
enemies.Add((GameObject.FindGameObjectsWithTag(TagToFind)).transform);
}
}
}
}
else
{
//Loops through all the enemies with this tag
for (int i = ((GameObject.FindGameObjectsWithTag(TagToFind)).Length - 1); i >= 1; i–)
{
//Gets all of the enemy transform with the tag
if (!enemies.Contains((GameObject.FindGameObjectsWithTag(TagToFind)).transform))
{
//Adds them to our list
enemies.Add((GameObject.FindGameObjectsWithTag(TagToFind)).transform);
}
}
}
}
void GetClosestEnemyDistance(List enemies, float distanceAllowedFromPlayer)
{
//This is our players position
Vector3 currentPosition = transform.position;
//This checks each enemy transform in enemies
for (int i = 0; i < enemies.Count; i++)
{
//This is the direction from our player to the enemy
Vector3 directionToTarget = enemies*.position - currentPosition;*
//This is the distance between them
float distanceSquaredToTarget = directionToTarget.sqrMagnitude;
//If our distance from the enemy is above or equal to our max Distance.
if (distanceSquaredToTarget >= distanceAllowedFromPlayer)
{
//Add our points to our score
DestroyEnemy(playerScore, ScoreToAdd);
//Change the tag of our enemy because it is no longer an enemy
enemies*.tag = “Untagged”;*
//Remove it from our list because it is no longer an enemy
enemies.Remove(enemies*);*
}
}
}
void DestroyEnemy(ScoreManager ScoreOfPlayer, int AddedScoreValue)
{
//Adds to our score managers score and shows it
ScoreOfPlayer.AddScore(AddedScoreValue);
}
This will be our script that manages our score:
//This is our text that shows our score
public UnityEngine.UI.Text scoreText;
//Our score reference
int score;

void Start()
{
//Set this to 0 at start
score = 0;
}

public void AddScore(int AmountToAddToScore)
{
//Add AmountToAddToScore to our score
score += AmountToAddToScore;
}

void Update()
{
//Change our score text to show our current score
scoreText.text = "Score: " + score;
}
Add both of these scripts to your player.