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;
}
}
}
}