Skip to main content
edited tags
Link
Vaillancourt
  • 16.4k
  • 17
  • 56
  • 61
deleted 210 characters in body
Source Link
using UnityEngine;

/*
If you want a background to scroll automatically (such as clouds might) then simply add the 
word "scroll" in any way shape or form to the name of the gameobject"
*/

public class ParallaxSpriteDynamic : MonoBehaviour
{
public Transform background;
Transform m_rightSideOfBackground, m_leftSideOfBackground;
float length, startPosX, startPosY, camStartPos, startDifference;startPosY;
public Transform cam;
float x, y, aspect, worldHeight, worldWidth, var1, var2;
public Vector2 minMaxParallaxValues;
public float maxHeight = 500, scrollSpeed, parallaxEffect;
bool scrollingBackground = false;
public bool freeze = false;
public float temp;

void Start()
{
    parallaxEffect = minMaxParallaxValues.x;
    Setup();
}

void Setup()
{
    Camera main_Cam = cam.GetComponent<Camera>();
    camStartPos = cam.position.y;
    if (background == null)
        background = transform;

    length = background.GetComponent<SpriteRenderer>().bounds.size.x;

    aspect = (float)Screen.width / Screen.height;
    worldHeight = main_Cam.orthographicSize * 2;
    worldWidth = worldHeight * aspect;

    var1 = (minMaxParallaxValues.y - minMaxParallaxValues.x) / maxHeight;

    float swdsw = Mathf.Ceil((worldWidth / length) + 1); //swdsw = screen width divided by sprite width

    bool toTheLeft = false;
    float rightLength = length;
    float leftLength = length;
    bool flipX = background.GetComponent<SpriteRenderer>().flipX;
    bool flipY = background.GetComponent<SpriteRenderer>().flipY;
    Sprite sprite = background.GetComponent<SpriteRenderer>().sprite;
    Color spriteColour = background.GetComponent<SpriteRenderer>().color;
    int spriteSortOrder = background.GetComponent<SpriteRenderer>().sortingOrder;
    int layer = background.transform.gameObject.layer;
    for (int a = 1; a < swdsw; a++)
    {
        GameObject extraBackground = new GameObject(background.name + " " + a);

        SpriteRenderer newSpriteRend = extraBackground.AddComponent<SpriteRenderer>();
        newSpriteRend.sprite = sprite;
        newSpriteRend.flipX = flipX;
        newSpriteRend.flipY = flipY;
        newSpriteRend.color = spriteColour;
        newSpriteRend.sortingOrder = spriteSortOrder;
        extraBackground.transform.SetParent(background.transform);
        extraBackground.transform.localScale = Vector3.one;
        extraBackground.transform.localRotation = new Quaternion(0, 0, 0, 0);
        extraBackground.layer = layer;
        if (toTheLeft == false)
        {
            extraBackground.transform.position = new Vector3(background.transform.position.x + (rightLength), background.transform.position.y, background.transform.position.z);
            rightLength += length;
            toTheLeft = true;
        }
        else
        {
            extraBackground.transform.position = new Vector3(background.transform.position.x - (leftLength), background.transform.position.y, background.transform.position.z);
            leftLength -= length * -1;
            toTheLeft = false;
        }
    }

    GameObject rightSideOfBackground = new GameObject(background.name + "(Right)");
    m_rightSideOfBackground = rightSideOfBackground.transform;
    m_rightSideOfBackground.transform.SetParent(background.transform);
    GameObject leftSideOfBackground = new GameObject(background.name + "(Left)");
    m_leftSideOfBackground = leftSideOfBackground.transform;
    m_leftSideOfBackground.transform.SetParent(background.transform);

    if (swdsw % 2 == 1) // Is odd
    {
        m_rightSideOfBackground.position = new Vector3(background.transform.position.x + (length / 2), background.transform.position.y, background.transform.position.z);
        m_leftSideOfBackground.position = new Vector3(background.transform.position.x - (length / 2), background.transform.position.y, background.transform.position.z);
    }
    else if (swdsw % 2 == 0) // Is even
    {
        m_rightSideOfBackground.position = new Vector3(background.transform.position.x + length, background.transform.position.y, background.transform.position.z);
        m_leftSideOfBackground.position = new Vector3(background.transform.position.x, background.transform.position.y, background.transform.position.z);
    }

    if (background.name.Contains("Scroll") || background.name.Contains("scroll"))
        scrollingBackground = true;

    Calculate();
}

void Calculate()
{
    var2 = var1 * cam.position.y;
    parallaxEffect = minMaxParallaxValues.x + var2;

    startPosX = background.position.x;
    startPosY = background.position.y;
    startDifference = -(cam.position.y * parallaxEffect) + startPosY;
}

void LateUpdate()
{
    if (freeze == false)
    {
        if (cam.position.y <= maxHeight && cam.position.y >= 0)
        {
            var2 = var1 * cam.position.y;
            parallaxEffect = minMaxParallaxValues.x + var2;
        }
        else if (cam.position.y < 0)
            parallaxEffect = minMaxParallaxValues.x;
        else if (cam.position.y > maxHeight)
            parallaxEffect = minMaxParallaxValues.y;
    }

    x = cam.position.x * parallaxEffect;parallaxEffect + startPosX;
    y = cam.position.y * parallaxEffect + startDifference;startPosY;
    temp = cam.position.y - y;
    background.position = new Vector3(startPosX + x, y, background.position.z);

    if (m_rightSideOfBackground.position.x < cam.position.x)
        startPosX += length;
    else if (m_leftSideOfBackground.position.x > cam.position.x)
        startPosX -= length;

    if (scrollingBackground == true)
        startPosX += scrollSpeed;
}
}
using UnityEngine;

/*
If you want a background to scroll automatically (such as clouds might) then simply add the 
word "scroll" in any way shape or form to the name of the gameobject"
*/

public class ParallaxSpriteDynamic : MonoBehaviour
{
public Transform background;
Transform m_rightSideOfBackground, m_leftSideOfBackground;
float length, startPosX, startPosY, camStartPos, startDifference;
public Transform cam;
float x, y, aspect, worldHeight, worldWidth, var1, var2;
public Vector2 minMaxParallaxValues;
public float maxHeight = 500, scrollSpeed, parallaxEffect;
bool scrollingBackground = false;
public bool freeze = false;
public float temp;

void Start()
{
    parallaxEffect = minMaxParallaxValues.x;
    Setup();
}

void Setup()
{
    Camera main_Cam = cam.GetComponent<Camera>();
    camStartPos = cam.position.y;
    if (background == null)
        background = transform;

    length = background.GetComponent<SpriteRenderer>().bounds.size.x;

    aspect = (float)Screen.width / Screen.height;
    worldHeight = main_Cam.orthographicSize * 2;
    worldWidth = worldHeight * aspect;

    var1 = (minMaxParallaxValues.y - minMaxParallaxValues.x) / maxHeight;

    float swdsw = Mathf.Ceil((worldWidth / length) + 1); //swdsw = screen width divided by sprite width

    bool toTheLeft = false;
    float rightLength = length;
    float leftLength = length;
    bool flipX = background.GetComponent<SpriteRenderer>().flipX;
    bool flipY = background.GetComponent<SpriteRenderer>().flipY;
    Sprite sprite = background.GetComponent<SpriteRenderer>().sprite;
    Color spriteColour = background.GetComponent<SpriteRenderer>().color;
    int spriteSortOrder = background.GetComponent<SpriteRenderer>().sortingOrder;
    int layer = background.transform.gameObject.layer;
    for (int a = 1; a < swdsw; a++)
    {
        GameObject extraBackground = new GameObject(background.name + " " + a);

        SpriteRenderer newSpriteRend = extraBackground.AddComponent<SpriteRenderer>();
        newSpriteRend.sprite = sprite;
        newSpriteRend.flipX = flipX;
        newSpriteRend.flipY = flipY;
        newSpriteRend.color = spriteColour;
        newSpriteRend.sortingOrder = spriteSortOrder;
        extraBackground.transform.SetParent(background.transform);
        extraBackground.transform.localScale = Vector3.one;
        extraBackground.transform.localRotation = new Quaternion(0, 0, 0, 0);
        extraBackground.layer = layer;
        if (toTheLeft == false)
        {
            extraBackground.transform.position = new Vector3(background.transform.position.x + (rightLength), background.transform.position.y, background.transform.position.z);
            rightLength += length;
            toTheLeft = true;
        }
        else
        {
            extraBackground.transform.position = new Vector3(background.transform.position.x - (leftLength), background.transform.position.y, background.transform.position.z);
            leftLength -= length * -1;
            toTheLeft = false;
        }
    }

    GameObject rightSideOfBackground = new GameObject(background.name + "(Right)");
    m_rightSideOfBackground = rightSideOfBackground.transform;
    m_rightSideOfBackground.transform.SetParent(background.transform);
    GameObject leftSideOfBackground = new GameObject(background.name + "(Left)");
    m_leftSideOfBackground = leftSideOfBackground.transform;
    m_leftSideOfBackground.transform.SetParent(background.transform);

    if (swdsw % 2 == 1) // Is odd
    {
        m_rightSideOfBackground.position = new Vector3(background.transform.position.x + (length / 2), background.transform.position.y, background.transform.position.z);
        m_leftSideOfBackground.position = new Vector3(background.transform.position.x - (length / 2), background.transform.position.y, background.transform.position.z);
    }
    else if (swdsw % 2 == 0) // Is even
    {
        m_rightSideOfBackground.position = new Vector3(background.transform.position.x + length, background.transform.position.y, background.transform.position.z);
        m_leftSideOfBackground.position = new Vector3(background.transform.position.x, background.transform.position.y, background.transform.position.z);
    }

    if (background.name.Contains("Scroll") || background.name.Contains("scroll"))
        scrollingBackground = true;

    Calculate();
}

void Calculate()
{
    var2 = var1 * cam.position.y;
    parallaxEffect = minMaxParallaxValues.x + var2;

    startPosX = background.position.x;
    startPosY = background.position.y;
    startDifference = -(cam.position.y * parallaxEffect) + startPosY;
}

void LateUpdate()
{
    if (freeze == false)
    {
        if (cam.position.y <= maxHeight && cam.position.y >= 0)
        {
            var2 = var1 * cam.position.y;
            parallaxEffect = minMaxParallaxValues.x + var2;
        }
        else if (cam.position.y < 0)
            parallaxEffect = minMaxParallaxValues.x;
        else if (cam.position.y > maxHeight)
            parallaxEffect = minMaxParallaxValues.y;
    }

    x = cam.position.x * parallaxEffect;
    y = cam.position.y * parallaxEffect + startDifference;
    temp = cam.position.y - y;
    background.position = new Vector3(startPosX + x, y, background.position.z);

    if (m_rightSideOfBackground.position.x < cam.position.x)
        startPosX += length;
    else if (m_leftSideOfBackground.position.x > cam.position.x)
        startPosX -= length;

    if (scrollingBackground == true)
        startPosX += scrollSpeed;
}
}
using UnityEngine;

/*
If you want a background to scroll automatically (such as clouds might) then simply add the 
word "scroll" in any way shape or form to the name of the gameobject"
*/

public class ParallaxSpriteDynamic : MonoBehaviour
{
public Transform background;
Transform m_rightSideOfBackground, m_leftSideOfBackground;
float length, startPosX, startPosY;
public Transform cam;
float x, y, aspect, worldHeight, worldWidth, var1, var2;
public Vector2 minMaxParallaxValues;
public float maxHeight = 500, scrollSpeed, parallaxEffect;
bool scrollingBackground = false;
public bool freeze = false;
public float temp;

void Start()
{
    parallaxEffect = minMaxParallaxValues.x;
    Setup();
}

void Setup()
{
    Camera main_Cam = cam.GetComponent<Camera>();
    if (background == null)
        background = transform;

    length = background.GetComponent<SpriteRenderer>().bounds.size.x;

    aspect = (float)Screen.width / Screen.height;
    worldHeight = main_Cam.orthographicSize * 2;
    worldWidth = worldHeight * aspect;

    var1 = (minMaxParallaxValues.y - minMaxParallaxValues.x) / maxHeight;

    float swdsw = Mathf.Ceil((worldWidth / length) + 1); //swdsw = screen width divided by sprite width

    bool toTheLeft = false;
    float rightLength = length;
    float leftLength = length;
    bool flipX = background.GetComponent<SpriteRenderer>().flipX;
    bool flipY = background.GetComponent<SpriteRenderer>().flipY;
    Sprite sprite = background.GetComponent<SpriteRenderer>().sprite;
    Color spriteColour = background.GetComponent<SpriteRenderer>().color;
    int spriteSortOrder = background.GetComponent<SpriteRenderer>().sortingOrder;
    int layer = background.transform.gameObject.layer;
    for (int a = 1; a < swdsw; a++)
    {
        GameObject extraBackground = new GameObject(background.name + " " + a);

        SpriteRenderer newSpriteRend = extraBackground.AddComponent<SpriteRenderer>();
        newSpriteRend.sprite = sprite;
        newSpriteRend.flipX = flipX;
        newSpriteRend.flipY = flipY;
        newSpriteRend.color = spriteColour;
        newSpriteRend.sortingOrder = spriteSortOrder;
        extraBackground.transform.SetParent(background.transform);
        extraBackground.transform.localScale = Vector3.one;
        extraBackground.transform.localRotation = new Quaternion(0, 0, 0, 0);
        extraBackground.layer = layer;
        if (toTheLeft == false)
        {
            extraBackground.transform.position = new Vector3(background.transform.position.x + (rightLength), background.transform.position.y, background.transform.position.z);
            rightLength += length;
            toTheLeft = true;
        }
        else
        {
            extraBackground.transform.position = new Vector3(background.transform.position.x - (leftLength), background.transform.position.y, background.transform.position.z);
            leftLength -= length * -1;
            toTheLeft = false;
        }
    }

    GameObject rightSideOfBackground = new GameObject(background.name + "(Right)");
    m_rightSideOfBackground = rightSideOfBackground.transform;
    m_rightSideOfBackground.transform.SetParent(background.transform);
    GameObject leftSideOfBackground = new GameObject(background.name + "(Left)");
    m_leftSideOfBackground = leftSideOfBackground.transform;
    m_leftSideOfBackground.transform.SetParent(background.transform);

    if (swdsw % 2 == 1) // Is odd
    {
        m_rightSideOfBackground.position = new Vector3(background.transform.position.x + (length / 2), background.transform.position.y, background.transform.position.z);
        m_leftSideOfBackground.position = new Vector3(background.transform.position.x - (length / 2), background.transform.position.y, background.transform.position.z);
    }
    else if (swdsw % 2 == 0) // Is even
    {
        m_rightSideOfBackground.position = new Vector3(background.transform.position.x + length, background.transform.position.y, background.transform.position.z);
        m_leftSideOfBackground.position = new Vector3(background.transform.position.x, background.transform.position.y, background.transform.position.z);
    }

    if (background.name.Contains("Scroll") || background.name.Contains("scroll"))
        scrollingBackground = true;

    var2 = var1 * cam.position.y;
    parallaxEffect = minMaxParallaxValues.x + var2;

    startPosX = background.position.x;
    startPosY = background.position.y;
}

void LateUpdate()
{
    if (freeze == false)
    {
        if (cam.position.y <= maxHeight && cam.position.y >= 0)
        {
            var2 = var1 * cam.position.y;
            parallaxEffect = minMaxParallaxValues.x + var2;
        }
        else if (cam.position.y < 0)
            parallaxEffect = minMaxParallaxValues.x;
        else if (cam.position.y > maxHeight)
            parallaxEffect = minMaxParallaxValues.y;
    }

    x = cam.position.x * parallaxEffect + startPosX;
    y = cam.position.y * parallaxEffect + startPosY;
    temp = cam.position.y - y;
    background.position = new Vector3(x, y, background.position.z);

    if (m_rightSideOfBackground.position.x < cam.position.x)
        startPosX += length;
    else if (m_leftSideOfBackground.position.x > cam.position.x)
        startPosX -= length;

    if (scrollingBackground == true)
        startPosX += scrollSpeed;
}
}
deleted 213 characters in body
Source Link
using UnityEngine;

/*
If you want a background to scroll automatically (such as clouds might) then simply add the 
word "scroll" in any way shape or form to the name of the gameobject"
*/

public class ParallaxSpriteDynamic : MonoBehaviour
{
public Transform background;
Transform m_rightSideOfBackground, m_leftSideOfBackground;
float length, startPosX, startPosY, camStartPos, startDifference;
public Transform cam;
float x, y, aspect, worldHeight, worldWidth, distToTarget, var1, var2;
public Vector2 minMaxParallaxValues;
public float maxHeight = 500, scrollSpeed, parallaxEffect;
bool scrollingBackground = false;
public bool freeze = false;
public float temp;

void Start()
{
    parallaxEffect = minMaxParallaxValues.x;
    Setup();
}

void Setup()
{
    Camera main_Cam = cam.GetComponent<Camera>();
    camStartPos = cam.position.y;
    if (background == null)
        background = transform;

    length = background.GetComponent<SpriteRenderer>().bounds.size.x;

    aspect = (float)Screen.width / Screen.height;
    worldHeight = main_Cam.orthographicSize * 2;
    worldWidth = worldHeight * aspect;

    var1 = (minMaxParallaxValues.y - minMaxParallaxValues.x) / maxHeight;

    float swdsw = Mathf.Ceil((worldWidth / length) + 1); //swdsw = screen width divided by sprite width

    bool toTheLeft = false;
    float rightLength = length;
    float leftLength = length;
    bool flipX = background.GetComponent<SpriteRenderer>().flipX;
    bool flipY = background.GetComponent<SpriteRenderer>().flipY;
    Sprite sprite = background.GetComponent<SpriteRenderer>().sprite;
    Color spriteColour = background.GetComponent<SpriteRenderer>().color;
    int spriteSortOrder = background.GetComponent<SpriteRenderer>().sortingOrder;
    int layer = background.transform.gameObject.layer;
    for (int a = 1; a < swdsw; a++)
    {
        GameObject extraBackground = new GameObject(background.name + " " + a);

        SpriteRenderer newSpriteRend = extraBackground.AddComponent<SpriteRenderer>();
        newSpriteRend.sprite = sprite;
        newSpriteRend.flipX = flipX;
        newSpriteRend.flipY = flipY;
        newSpriteRend.color = spriteColour;
        newSpriteRend.sortingOrder = spriteSortOrder;
        extraBackground.transform.SetParent(background.transform);
        extraBackground.transform.localScale = Vector3.one;
        extraBackground.transform.localRotation = new Quaternion(0, 0, 0, 0);
        extraBackground.layer = layer;
        if (toTheLeft == false)
        {
            extraBackground.transform.position = new Vector3(background.transform.position.x + (rightLength), background.transform.position.y, background.transform.position.z);
            rightLength += length;
            toTheLeft = true;
        }
        else
        {
            extraBackground.transform.position = new Vector3(background.transform.position.x - (leftLength), background.transform.position.y, background.transform.position.z);
            leftLength -= length * -1;
            toTheLeft = false;
        }
    }

    GameObject rightSideOfBackground = new GameObject(background.name + "(Right)");
    m_rightSideOfBackground = rightSideOfBackground.transform;
    m_rightSideOfBackground.transform.SetParent(background.transform);
    GameObject leftSideOfBackground = new GameObject(background.name + "(Left)");
    m_leftSideOfBackground = leftSideOfBackground.transform;
    m_leftSideOfBackground.transform.SetParent(background.transform);

    if (swdsw % 2 == 1) // Is odd
    {
        m_rightSideOfBackground.position = new Vector3(background.transform.position.x + (length / 2), background.transform.position.y, background.transform.position.z);
        m_leftSideOfBackground.position = new Vector3(background.transform.position.x - (length / 2), background.transform.position.y, background.transform.position.z);
    }
    else if (swdsw % 2 == 0) // Is even
    {
        m_rightSideOfBackground.position = new Vector3(background.transform.position.x + length, background.transform.position.y, background.transform.position.z);
        m_leftSideOfBackground.position = new Vector3(background.transform.position.x, background.transform.position.y, background.transform.position.z);
    }

    if (background.name.Contains("Scroll") || background.name.Contains("scroll"))
        scrollingBackground = true;

    Calculate();
}

void Calculate()
{
    if (cam == null)
        cam = MainCameraInstance.cameraTransform;

    distToTarget = maxHeight - cam.position.y;

    var2 = var1 * cam.position.y;
    parallaxEffect = minMaxParallaxValues.x + var2;

    startPosX = background.position.x;
    startPosY = background.position.y;
    startDifference = -(cam.position.y * parallaxEffect) + startPosY;
}

void LateUpdate()
{
    if (freeze == false)
    {
        if (cam.position.y <= maxHeight && cam.position.y >= 0)
        {
            distToTarget = maxHeight - cam.position.y;

            var2 = var1 * cam.position.y;
            parallaxEffect = minMaxParallaxValues.x + var2;
        }
        else if (cam.position.y < 0)
            parallaxEffect = minMaxParallaxValues.x;
        else if (cam.position.y > maxHeight)
            parallaxEffect = minMaxParallaxValues.y;
    }

    x = cam.position.x * parallaxEffect;
    y = cam.position.y * parallaxEffect + startDifference;
    temp = cam.position.y - y;
    background.position = new Vector3(startPosX + x, y, background.position.z);

    if (m_rightSideOfBackground.position.x < cam.position.x)
        startPosX += length;
    else if (m_leftSideOfBackground.position.x > cam.position.x)
        startPosX -= length;

    if (scrollingBackground == true)
        startPosX += scrollSpeed;
}
}
using UnityEngine;

/*
If you want a background to scroll automatically (such as clouds might) then simply add the 
word "scroll" in any way shape or form to the name of the gameobject"
*/

public class ParallaxSpriteDynamic : MonoBehaviour
{
public Transform background;
Transform m_rightSideOfBackground, m_leftSideOfBackground;
float length, startPosX, startPosY, camStartPos, startDifference;
public Transform cam;
float x, y, aspect, worldHeight, worldWidth, distToTarget, var1, var2;
public Vector2 minMaxParallaxValues;
public float maxHeight = 500, scrollSpeed, parallaxEffect;
bool scrollingBackground = false;
public bool freeze = false;
public float temp;

void Start()
{
    parallaxEffect = minMaxParallaxValues.x;
    Setup();
}

void Setup()
{
    Camera main_Cam = cam.GetComponent<Camera>();
    camStartPos = cam.position.y;
    if (background == null)
        background = transform;

    length = background.GetComponent<SpriteRenderer>().bounds.size.x;

    aspect = (float)Screen.width / Screen.height;
    worldHeight = main_Cam.orthographicSize * 2;
    worldWidth = worldHeight * aspect;

    var1 = (minMaxParallaxValues.y - minMaxParallaxValues.x) / maxHeight;

    float swdsw = Mathf.Ceil((worldWidth / length) + 1); //swdsw = screen width divided by sprite width

    bool toTheLeft = false;
    float rightLength = length;
    float leftLength = length;
    bool flipX = background.GetComponent<SpriteRenderer>().flipX;
    bool flipY = background.GetComponent<SpriteRenderer>().flipY;
    Sprite sprite = background.GetComponent<SpriteRenderer>().sprite;
    Color spriteColour = background.GetComponent<SpriteRenderer>().color;
    int spriteSortOrder = background.GetComponent<SpriteRenderer>().sortingOrder;
    int layer = background.transform.gameObject.layer;
    for (int a = 1; a < swdsw; a++)
    {
        GameObject extraBackground = new GameObject(background.name + " " + a);

        SpriteRenderer newSpriteRend = extraBackground.AddComponent<SpriteRenderer>();
        newSpriteRend.sprite = sprite;
        newSpriteRend.flipX = flipX;
        newSpriteRend.flipY = flipY;
        newSpriteRend.color = spriteColour;
        newSpriteRend.sortingOrder = spriteSortOrder;
        extraBackground.transform.SetParent(background.transform);
        extraBackground.transform.localScale = Vector3.one;
        extraBackground.transform.localRotation = new Quaternion(0, 0, 0, 0);
        extraBackground.layer = layer;
        if (toTheLeft == false)
        {
            extraBackground.transform.position = new Vector3(background.transform.position.x + (rightLength), background.transform.position.y, background.transform.position.z);
            rightLength += length;
            toTheLeft = true;
        }
        else
        {
            extraBackground.transform.position = new Vector3(background.transform.position.x - (leftLength), background.transform.position.y, background.transform.position.z);
            leftLength -= length * -1;
            toTheLeft = false;
        }
    }

    GameObject rightSideOfBackground = new GameObject(background.name + "(Right)");
    m_rightSideOfBackground = rightSideOfBackground.transform;
    m_rightSideOfBackground.transform.SetParent(background.transform);
    GameObject leftSideOfBackground = new GameObject(background.name + "(Left)");
    m_leftSideOfBackground = leftSideOfBackground.transform;
    m_leftSideOfBackground.transform.SetParent(background.transform);

    if (swdsw % 2 == 1) // Is odd
    {
        m_rightSideOfBackground.position = new Vector3(background.transform.position.x + (length / 2), background.transform.position.y, background.transform.position.z);
        m_leftSideOfBackground.position = new Vector3(background.transform.position.x - (length / 2), background.transform.position.y, background.transform.position.z);
    }
    else if (swdsw % 2 == 0) // Is even
    {
        m_rightSideOfBackground.position = new Vector3(background.transform.position.x + length, background.transform.position.y, background.transform.position.z);
        m_leftSideOfBackground.position = new Vector3(background.transform.position.x, background.transform.position.y, background.transform.position.z);
    }

    if (background.name.Contains("Scroll") || background.name.Contains("scroll"))
        scrollingBackground = true;

    Calculate();
}

void Calculate()
{
    if (cam == null)
        cam = MainCameraInstance.cameraTransform;

    distToTarget = maxHeight - cam.position.y;

    var2 = var1 * cam.position.y;
    parallaxEffect = minMaxParallaxValues.x + var2;

    startPosX = background.position.x;
    startPosY = background.position.y;
    startDifference = -(cam.position.y * parallaxEffect) + startPosY;
}

void LateUpdate()
{
    if (freeze == false)
    {
        if (cam.position.y <= maxHeight && cam.position.y >= 0)
        {
            distToTarget = maxHeight - cam.position.y;

            var2 = var1 * cam.position.y;
            parallaxEffect = minMaxParallaxValues.x + var2;
        }
        else if (cam.position.y < 0)
            parallaxEffect = minMaxParallaxValues.x;
        else if (cam.position.y > maxHeight)
            parallaxEffect = minMaxParallaxValues.y;
    }

    x = cam.position.x * parallaxEffect;
    y = cam.position.y * parallaxEffect + startDifference;
    temp = cam.position.y - y;
    background.position = new Vector3(startPosX + x, y, background.position.z);

    if (m_rightSideOfBackground.position.x < cam.position.x)
        startPosX += length;
    else if (m_leftSideOfBackground.position.x > cam.position.x)
        startPosX -= length;

    if (scrollingBackground == true)
        startPosX += scrollSpeed;
}
}
using UnityEngine;

/*
If you want a background to scroll automatically (such as clouds might) then simply add the 
word "scroll" in any way shape or form to the name of the gameobject"
*/

public class ParallaxSpriteDynamic : MonoBehaviour
{
public Transform background;
Transform m_rightSideOfBackground, m_leftSideOfBackground;
float length, startPosX, startPosY, camStartPos, startDifference;
public Transform cam;
float x, y, aspect, worldHeight, worldWidth, var1, var2;
public Vector2 minMaxParallaxValues;
public float maxHeight = 500, scrollSpeed, parallaxEffect;
bool scrollingBackground = false;
public bool freeze = false;
public float temp;

void Start()
{
    parallaxEffect = minMaxParallaxValues.x;
    Setup();
}

void Setup()
{
    Camera main_Cam = cam.GetComponent<Camera>();
    camStartPos = cam.position.y;
    if (background == null)
        background = transform;

    length = background.GetComponent<SpriteRenderer>().bounds.size.x;

    aspect = (float)Screen.width / Screen.height;
    worldHeight = main_Cam.orthographicSize * 2;
    worldWidth = worldHeight * aspect;

    var1 = (minMaxParallaxValues.y - minMaxParallaxValues.x) / maxHeight;

    float swdsw = Mathf.Ceil((worldWidth / length) + 1); //swdsw = screen width divided by sprite width

    bool toTheLeft = false;
    float rightLength = length;
    float leftLength = length;
    bool flipX = background.GetComponent<SpriteRenderer>().flipX;
    bool flipY = background.GetComponent<SpriteRenderer>().flipY;
    Sprite sprite = background.GetComponent<SpriteRenderer>().sprite;
    Color spriteColour = background.GetComponent<SpriteRenderer>().color;
    int spriteSortOrder = background.GetComponent<SpriteRenderer>().sortingOrder;
    int layer = background.transform.gameObject.layer;
    for (int a = 1; a < swdsw; a++)
    {
        GameObject extraBackground = new GameObject(background.name + " " + a);

        SpriteRenderer newSpriteRend = extraBackground.AddComponent<SpriteRenderer>();
        newSpriteRend.sprite = sprite;
        newSpriteRend.flipX = flipX;
        newSpriteRend.flipY = flipY;
        newSpriteRend.color = spriteColour;
        newSpriteRend.sortingOrder = spriteSortOrder;
        extraBackground.transform.SetParent(background.transform);
        extraBackground.transform.localScale = Vector3.one;
        extraBackground.transform.localRotation = new Quaternion(0, 0, 0, 0);
        extraBackground.layer = layer;
        if (toTheLeft == false)
        {
            extraBackground.transform.position = new Vector3(background.transform.position.x + (rightLength), background.transform.position.y, background.transform.position.z);
            rightLength += length;
            toTheLeft = true;
        }
        else
        {
            extraBackground.transform.position = new Vector3(background.transform.position.x - (leftLength), background.transform.position.y, background.transform.position.z);
            leftLength -= length * -1;
            toTheLeft = false;
        }
    }

    GameObject rightSideOfBackground = new GameObject(background.name + "(Right)");
    m_rightSideOfBackground = rightSideOfBackground.transform;
    m_rightSideOfBackground.transform.SetParent(background.transform);
    GameObject leftSideOfBackground = new GameObject(background.name + "(Left)");
    m_leftSideOfBackground = leftSideOfBackground.transform;
    m_leftSideOfBackground.transform.SetParent(background.transform);

    if (swdsw % 2 == 1) // Is odd
    {
        m_rightSideOfBackground.position = new Vector3(background.transform.position.x + (length / 2), background.transform.position.y, background.transform.position.z);
        m_leftSideOfBackground.position = new Vector3(background.transform.position.x - (length / 2), background.transform.position.y, background.transform.position.z);
    }
    else if (swdsw % 2 == 0) // Is even
    {
        m_rightSideOfBackground.position = new Vector3(background.transform.position.x + length, background.transform.position.y, background.transform.position.z);
        m_leftSideOfBackground.position = new Vector3(background.transform.position.x, background.transform.position.y, background.transform.position.z);
    }

    if (background.name.Contains("Scroll") || background.name.Contains("scroll"))
        scrollingBackground = true;

    Calculate();
}

void Calculate()
{
    var2 = var1 * cam.position.y;
    parallaxEffect = minMaxParallaxValues.x + var2;

    startPosX = background.position.x;
    startPosY = background.position.y;
    startDifference = -(cam.position.y * parallaxEffect) + startPosY;
}

void LateUpdate()
{
    if (freeze == false)
    {
        if (cam.position.y <= maxHeight && cam.position.y >= 0)
        {
            var2 = var1 * cam.position.y;
            parallaxEffect = minMaxParallaxValues.x + var2;
        }
        else if (cam.position.y < 0)
            parallaxEffect = minMaxParallaxValues.x;
        else if (cam.position.y > maxHeight)
            parallaxEffect = minMaxParallaxValues.y;
    }

    x = cam.position.x * parallaxEffect;
    y = cam.position.y * parallaxEffect + startDifference;
    temp = cam.position.y - y;
    background.position = new Vector3(startPosX + x, y, background.position.z);

    if (m_rightSideOfBackground.position.x < cam.position.x)
        startPosX += length;
    else if (m_leftSideOfBackground.position.x > cam.position.x)
        startPosX -= length;

    if (scrollingBackground == true)
        startPosX += scrollSpeed;
}
}
deleted 28 characters in body
Source Link
Loading
Source Link
Loading