Last active
December 12, 2023 15:56
-
-
Save Lioncat2002/d8e0966c59e4636bf35ec3523aac246a to your computer and use it in GitHub Desktop.
SpriteStacking in Unity
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using UnityEngine; | |
public class SpriteStacking : MonoBehaviour | |
{ | |
public Sprite[] spriteFrames; | |
public float layerSpacing = 0.01f; | |
public float offset = 0.01f; // Add an offset between sprite layers | |
public float parallaxSpeed = 5f; | |
void Start() | |
{ | |
// Check if sprite layers need to be created | |
if (transform.childCount == 0) | |
{ | |
CreateSpriteLayers(); | |
} | |
} | |
private void Update() | |
{ | |
// Move sprite layers continuously | |
MoveSpriteLayers(); | |
} | |
void CreateSpriteLayers() | |
{ | |
if (spriteFrames.Length == 0) | |
{ | |
Debug.LogError("No sprite frames assigned!"); | |
return; | |
} | |
float totalDepth = spriteFrames.Length * (layerSpacing + offset); | |
for (int i = 0; i < spriteFrames.Length; i++) | |
{ | |
GameObject spriteLayer = new GameObject("SpriteLayer_" + i); | |
spriteLayer.transform.parent = transform; | |
SpriteRenderer spriteRenderer = spriteLayer.AddComponent<SpriteRenderer>(); | |
spriteRenderer.sprite = spriteFrames[i]; | |
spriteRenderer.sortingOrder= -i; | |
// Calculate depth position with offset | |
float depthPosition = i * (layerSpacing + offset); | |
spriteLayer.transform.position = new Vector3(transform.position.x, -depthPosition, transform.position.z); | |
} | |
} | |
void MoveSpriteLayers() | |
{ | |
foreach (Transform layerTransform in transform) | |
{ | |
// Move the layer continuously in the x-axis | |
layerTransform.Rotate(new Vector3(0,0,-parallaxSpeed * Time.deltaTime)); | |
// Check if the layer is beyond the screen to the left, then reset its position | |
if (layerTransform.position.x < -10f) // Adjust this value based on your scene size | |
{ | |
layerTransform.position += new Vector3((layerSpacing + offset) * spriteFrames.Length, 0f, 0f); | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment