]> git.lizzy.rs Git - SuperMouseAdventure.git/blobdiff - 2DGame/Assets/Scripts/Background/Parallaxing.cs
parallax effect v1.0
[SuperMouseAdventure.git] / 2DGame / Assets / Scripts / Background / Parallaxing.cs
index 6a1a79a293dba08262f135f0523f1f9de44e362e..1e3d45c405acc77d3c54fc001f1d459287da0363 100644 (file)
@@ -4,15 +4,47 @@ using UnityEngine;
 
 public class Parallaxing : MonoBehaviour
 {
-    // Start is called before the first frame update
-    void Start()
-    {
+    [SerializeField] private Vector2 parallaxEffectMultiplier;
+    [SerializeField] private bool infiniteHorizontal;
+    [SerializeField] private bool infiniteVertical;
+    
+    private Transform cameraTransform;
+    Vector3 lastCameraPosition;
+    private float textureUnitSizeX;
+    private float textureUnitSizeY;
 
+    private void Start()
+    {
+        cameraTransform = Camera.main.transform;
+        lastCameraPosition = cameraTransform.position;
+        Sprite sprite = GetComponent<SpriteRenderer>().sprite;
+        Texture2D texture = sprite.texture;
+        textureUnitSizeX = texture.width / sprite.pixelsPerUnit;
+        textureUnitSizeY = texture.height / sprite.pixelsPerUnit;
     }
 
-    // Update is called once per frame
-    void Update()
+    private void LateUpdate()
     {
+        Vector3 deltaMovement = cameraTransform.position - lastCameraPosition;
+        transform.position += new Vector3(deltaMovement.x * parallaxEffectMultiplier.x, deltaMovement.y * parallaxEffectMultiplier.y);
+        lastCameraPosition = cameraTransform.position;
+
+        if(infiniteVertical)
+        {
+            if (Mathf.Abs(cameraTransform.position.x - transform.position.x) >= textureUnitSizeX)
+            {
+                float offsetPositionX = (cameraTransform.position.x - transform.position.x) % textureUnitSizeX;
+                transform.position = new Vector3(cameraTransform.position.x + offsetPositionX, transform.position.y);
+            }
+        }
 
+        if(infiniteHorizontal)
+        {
+            if (Mathf.Abs(cameraTransform.position.y - transform.position.y) >= textureUnitSizeY)
+            {
+                float offsetPositionY = (cameraTransform.position.y - transform.position.y) % textureUnitSizeY;
+                transform.position = new Vector3(transform.position.x, cameraTransform.position.y + offsetPositionY);
+            }
+        }
     }
 }