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;
}
}
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;
}
}
Loading
Loading
lang-cs