RepeatSpriteBoundary.cs 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. using System;
  2. using UnityEngine;
  3. [RequireComponent(typeof(SpriteRenderer))]
  4. public class RepeatSpriteBoundary : MonoBehaviour
  5. {
  6. private void Awake()
  7. {
  8. this.sprite = base.GetComponent<SpriteRenderer>();
  9. if (!SpritePivotAlignment.GetSpriteAlignment(base.gameObject).Equals(SpriteAlignment.TopRight))
  10. {
  11. UnityEngine.Debug.LogError("You forgot change the sprite pivot to Top Right.");
  12. }
  13. Vector2 vector = new Vector2(this.sprite.bounds.size.x / base.transform.localScale.x, this.sprite.bounds.size.y / base.transform.localScale.y);
  14. GameObject gameObject = new GameObject();
  15. SpriteRenderer spriteRenderer = gameObject.AddComponent<SpriteRenderer>();
  16. gameObject.transform.position = base.transform.position;
  17. spriteRenderer.sprite = this.sprite.sprite;
  18. spriteRenderer.sortingLayerID = this.sprite.sortingLayerID;
  19. spriteRenderer.sortingLayerName = this.sprite.sortingLayerName;
  20. spriteRenderer.sortingOrder = this.sprite.sortingOrder;
  21. int num = 0;
  22. int num2 = (int)Mathf.Round(this.sprite.bounds.size.y);
  23. while ((float)num * vector.y < (float)num2)
  24. {
  25. int num3 = 0;
  26. int num4 = (int)Mathf.Round(this.sprite.bounds.size.x);
  27. while ((float)num3 * vector.x < (float)num4)
  28. {
  29. GameObject gameObject2 = UnityEngine.Object.Instantiate<GameObject>(gameObject);
  30. gameObject2.transform.position = base.transform.position - new Vector3(vector.x * (float)num3, vector.y * (float)num, 0f);
  31. gameObject2.transform.parent = base.transform;
  32. num3++;
  33. }
  34. num++;
  35. }
  36. UnityEngine.Object.Destroy(gameObject);
  37. this.sprite.enabled = false;
  38. }
  39. private SpriteRenderer sprite;
  40. }