Problems with my infinite scrolling 2D background script

So I have tried looking it up, but I cannot seam to find an efficient solution to the scrolling 2D background.

Here is what my code looks like using 2D sprites. It is essentially a jerry rigged script, imo and I am trying to find a better more efficient solution. Using the script below, it will produce seams in between the 2 sprites and I cannot find a permanent solution to this. Not sure what to do, please help, thanks.

using UnityEngine;
using System.Collections;
public class BGMovementManager : MonoBehaviour {
    private newPlayer player;
    private float endPosition = -28.79487f;
    private Vector2 mountainStartPosition;
    private Vector2 fieldBackStartPosition;
    private Vector2 fieldMiddleStartPosition;
    private Vector2 fieldFrontStartPosition;
    public GameObject mountains;
    public GameObject mountains2;
    public GameObject fieldBack;
    public GameObject fieldBack2;
    public GameObject fieldMiddle;
    public GameObject fieldMiddle2;
    public GameObject fieldFront;
    public GameObject fieldFront2;
    public float mountainSpeed;
    public float fieldBackSpeed;
    public float fieldMiddleSpeed;
    public float fieldFrontSpeed;
    private SpriteRenderer mountainSprite;
    private SpriteRenderer mountainSprite2;
    private Vector2 startPosition;
    // Use this for initialization
    void Start () {
        player = GameObject.Find ("hero").GetComponent<newPlayer>();
        mountainStartPosition = new Vector2(9.54f,mountains.transform.position.y);
        fieldBackStartPosition = new Vector2(9.54f,fieldBack.transform.position.y);
        fieldMiddleStartPosition = new Vector2(9.53f,fieldMiddle.transform.position.y);
        fieldFrontStartPosition = new Vector2(9.52f,fieldFront.transform.position.y);
    }
    // Update is called once per frame
    void Update () {
        if(player.started)
        {
            //mountain movement
            mountains.transform.position = new Vector2(mountains.transform.position.x +(Time.deltaTime * -mountainSpeed), mountains.transform.position.y);
            mountains2.transform.position = new Vector2(mountains2.transform.position.x +(Time.deltaTime * -mountainSpeed), mountains.transform.position.y);
            if(mountains.transform.position.x < endPosition)
            {
                mountains.transform.position = mountainStartPosition;
            }
            if(mountains2.transform.position.x < endPosition)
            {
                mountains2.transform.position = mountainStartPosition;
            }
            //field back movement
            fieldBack.transform.position = new Vector2(fieldBack.transform.position.x +(Time.deltaTime * -fieldBackSpeed), fieldBack.transform.position.y);
            fieldBack2.transform.position = new Vector2(fieldBack2.transform.position.x +(Time.deltaTime * -fieldBackSpeed), fieldBack2.transform.position.y);
            if(fieldBack.transform.position.x < endPosition)
            {
                fieldBack.transform.position = fieldBackStartPosition;
            }
            if(fieldBack2.transform.position.x < endPosition)
            {
                fieldBack2.transform.position = fieldBackStartPosition;
            }
            //field middle movement
            fieldMiddle.transform.position = new Vector2(fieldMiddle.transform.position.x +(Time.deltaTime * -fieldMiddleSpeed), fieldMiddle.transform.position.y);
            fieldMiddle2.transform.position = new Vector2(fieldMiddle2.transform.position.x +(Time.deltaTime * -fieldMiddleSpeed), fieldMiddle2.transform.position.y);
            if(fieldMiddle.transform.position.x < endPosition)
            {
                fieldMiddle.transform.position = fieldMiddleStartPosition;
            }
            if(fieldMiddle2.transform.position.x < endPosition)
            {
                fieldMiddle2.transform.position = fieldMiddleStartPosition;
            }
            //field front movement
            fieldFront.transform.position = new Vector2(fieldFront.transform.position.x +(Time.deltaTime * -fieldFrontSpeed), fieldFront.transform.position.y);
            fieldFront2.transform.position = new Vector2(fieldFront2.transform.position.x +(Time.deltaTime * -fieldFrontSpeed), fieldFront2.transform.position.y);
            if(fieldFront.transform.position.x < endPosition)
            {
                fieldFront.transform.position = fieldFrontStartPosition;
            }
            if(fieldFront2.transform.position.x < endPosition)
            {
                fieldFront2.transform.position = fieldFrontStartPosition;
            }
        }
    }
}

I made a tutorial a long time ago covering this. Or else let me know if it’s something else you need.