]> git.lizzy.rs Git - SuperMouseAdventure.git/blob - 2DGame/Assets/Scripts/Background/Parallaxing.cs
parallax effect v1.0
[SuperMouseAdventure.git] / 2DGame / Assets / Scripts / Background / Parallaxing.cs
1 using System.Collections;
2 using System.Collections.Generic;
3 using UnityEngine;
4
5 public class Parallaxing : MonoBehaviour
6 {
7     [SerializeField] private Vector2 parallaxEffectMultiplier;
8     [SerializeField] private bool infiniteHorizontal;
9     [SerializeField] private bool infiniteVertical;
10     
11     private Transform cameraTransform;
12     Vector3 lastCameraPosition;
13     private float textureUnitSizeX;
14     private float textureUnitSizeY;
15
16     private void Start()
17     {
18         cameraTransform = Camera.main.transform;
19         lastCameraPosition = cameraTransform.position;
20         Sprite sprite = GetComponent<SpriteRenderer>().sprite;
21         Texture2D texture = sprite.texture;
22         textureUnitSizeX = texture.width / sprite.pixelsPerUnit;
23         textureUnitSizeY = texture.height / sprite.pixelsPerUnit;
24     }
25
26     private void LateUpdate()
27     {
28         Vector3 deltaMovement = cameraTransform.position - lastCameraPosition;
29         transform.position += new Vector3(deltaMovement.x * parallaxEffectMultiplier.x, deltaMovement.y * parallaxEffectMultiplier.y);
30         lastCameraPosition = cameraTransform.position;
31
32         if(infiniteVertical)
33         {
34             if (Mathf.Abs(cameraTransform.position.x - transform.position.x) >= textureUnitSizeX)
35             {
36                 float offsetPositionX = (cameraTransform.position.x - transform.position.x) % textureUnitSizeX;
37                 transform.position = new Vector3(cameraTransform.position.x + offsetPositionX, transform.position.y);
38             }
39         }
40
41         if(infiniteHorizontal)
42         {
43             if (Mathf.Abs(cameraTransform.position.y - transform.position.y) >= textureUnitSizeY)
44             {
45                 float offsetPositionY = (cameraTransform.position.y - transform.position.y) % textureUnitSizeY;
46                 transform.position = new Vector3(transform.position.x, cameraTransform.position.y + offsetPositionY);
47             }
48         }
49     }
50 }