Cloned Prefab through InvokeRepeating doesn't spawn correctly

I’ll try to keep this short and simple. I have a series of prefabs that spawn along an axis using spawn points at different times. They all should move along at the same speed. These prefabs are obstacles in an infinite runner game. All of my cloned prefabs work as intended, except for one, and it’s always the same one as well. It has some scripts missing, which means it moves much slower and it also won’t be destroyed by my prefab destroyer when it passes through. I just don’t get why it’s doing this.
I have four different obstacles, all separate but they function the same way. I’ll put up the scripts that invoke these obstacles and also some screenshots.

using UnityEngine;
using System.Collections;

public class OSTest : MonoBehaviour {

    //Obstacle variable (In Inspector the obstacle can be assigned so the scene knows which obstacle to spawn)
    public GameObject obstacle;

    //Time between spawns (can be edited in Inspector to test and experiment with different times)
    public float spawnTime = 3f;

    //Spawn Point variable that allows spawn point to be assigned in Inspector
    public Transform[] spawnPoints;

    //When the game starts running...
    void Start()
    {
        //This statement calls the SpawnObstacle method, as well as the spawn time variable so that the objects spawn
        InvokeRepeating ("SpawnObstacle", spawnTime, spawnTime);
    }

    void SpawnObstacle()
    {
        //The spawn point index gets the number of spawn points
        int spawnPointIndex = Random.Range (0, spawnPoints.Length);

        //The obstacle variable is instantiated, and also gets all the spawn point's positions and rotations so that the
        //obstacles spawn from the correct place
        Instantiate (obstacle, spawnPoints [spawnPointIndex].position, spawnPoints [spawnPointIndex].rotation);
    }

}
using UnityEngine;
using System.Collections.Generic;
using System.Linq;

public class ObstacleSpawner2 : MonoBehaviour {

    //Create new Vector2 scrolling speed of 2 (for x and y values)
    public Vector2 speed = new Vector2(2, 2);
   
    //Create a new Vector2 moving direction (-1 for x, 0 for y)
    public Vector2 direction = new Vector2 (-1, 0);
   
    //Movement applied to camera
    public bool isLinkedToCamera = false;
   
    //Infinite obstacle toggle
    public bool isLooping = false;
   
    //List of children with a renderer
    private List<SpriteRenderer> obstacle;
   
    //Get all the children
    void Start () {
        //For infinite obstacle only
        if (isLooping)
        {
            //Get all children of layer with renderer
            obstacle = new List<SpriteRenderer>();
           
            for (int i = 0; i < transform.childCount; i++)
            {
                Transform child = transform.GetChild(i);
                SpriteRenderer r = child.GetComponent<SpriteRenderer>();
               
                //Add only visible children
                if(r != null)
                {
                    obstacle.Add(r);
                }
            }
           
            //Sort by position
            obstacle = obstacle.OrderBy
                (t => t.transform.position.x).ToList();
        }
       
    }
   
    // Update is called once per frame
    void Update () {
        //Movement, Vector3 (x, y, z). x and y values multiplied by speed and direction
        Vector3 movement = new Vector3 (speed.x * direction.x,
                                        speed.y * direction.y,
                                        0);
        movement *= Time.deltaTime;
        transform.Translate (movement);
       
        //Move camera
        if (isLinkedToCamera)
        {
            Camera.main.transform.Translate(movement);
        }
       
        //Loop
        if (isLooping)
        {
            //Get first object
            SpriteRenderer firstChild = obstacle.FirstOrDefault();
           
            if(firstChild != null)
            {
                //Check if child is already (partly) before the camera
                if(firstChild.transform.position.x < Camera.main.transform.position.x)
                {
                    //Check if child is outside of camera view
                    if(firstChild.IsVisibleFrom(Camera.main) == false)
                    {
                        //Get last child position
                        SpriteRenderer lastChild = obstacle.LastOrDefault();
                       
                        Vector3 lastPosition = lastChild.transform.position;
                       
                        Vector3 lastSize = (lastChild.bounds.max - lastChild.bounds.min);
                       
                        //Set position of recycled child to be after the last child
                        firstChild.transform.position = new Vector3 (lastPosition.x + lastSize.x,
                                                                     firstChild.transform.position.y,
                                                                     firstChild.transform.position.z);
                        //Set recycled child to last position of obstacke list
                        obstacle.Remove(firstChild);
                        obstacle.Add(firstChild);
                    }
                }
            }
        }
       
    }
}

The second script moves the spawned obstacles along. This script, for some reason, is missing on that one cloned prefab. It doesn’t happen with any other cloned prefabs. All the obstacles have the same components and settings, except for different assigned obstacle prefabs and spawn points.


In this screen capture in the Inspector, the troublesome clone is selected. Some components are missing…

…as for example in this screen capture, a correct-working clone has all the components.

delete and remake the prefab? i had this a few days ago where a prefab only spawned half of it’s mesh…
only think that fixed it was recreating it from scratch…