Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using UnityEngine;
- using System.Collections;
- // @NOTE the attached sprite's position should be "top left" or the children will not align properly
- // Strech out the image as you need in the sprite render, the following script will auto-correct it when rendered in the game
- [RequireComponent (typeof (SpriteRenderer))]
- // Generates a nice set of repeated sprites inside a streched sprite renderer
- // @NOTE Vertical only, you can easily expand this to horizontal with a little tweaking
- public class RepeteSprite : MonoBehaviour {
- SpriteRenderer sprite;
- public Sprite cantoDireito,cantoEsquerdo;
- public PhysicsMaterial2D material;
- void Awake () {
- print ("roou repete sprite");
- // Get the current sprite with an unscaled size
- sprite = GetComponent<SpriteRenderer>();
- Vector2 spriteSize = new Vector2(sprite.bounds.size.x / transform.localScale.x, sprite.bounds.size.y / transform.localScale.y);
- // Generate a child prefab of the sprite renderer
- GameObject childPrefab = new GameObject();
- SpriteRenderer childSprite = childPrefab.AddComponent<SpriteRenderer>();
- BoxCollider2D coll= childPrefab.AddComponent<BoxCollider2D>();
- coll.sharedMaterial = material;
- coll.size = sprite.sprite.bounds.size;
- childPrefab.transform.position = transform.position;
- childSprite.sprite = sprite.sprite;
- childPrefab.layer = 8;
- // Loop through and spit out repeated tiles
- GameObject child;
- print ("l = "+(int)Mathf.Round(sprite.bounds.size.x));
- for (int i = 1, l = (int)Mathf.Round(sprite.bounds.size.x); i <=l*0.5; i++) {
- child = Instantiate(childPrefab) as GameObject;
- child.transform.position = transform.position - (new Vector3(spriteSize.x,0, 0) * i);
- child.transform.parent = transform;
- }
- for (int i = 1, l = (int)Mathf.Round(sprite.bounds.size.x); i <=l*0.5; i++) {
- child = Instantiate(childPrefab) as GameObject;
- child.transform.position = transform.position + (new Vector3(spriteSize.x,0, 0) * i);
- child.transform.parent = transform;
- }
- for (int i = 1, l = (int)Mathf.Round(sprite.bounds.size.y); i <l*0.8f; i++) {
- child = Instantiate(childPrefab) as GameObject;
- child.transform.position = transform.position - (new Vector3(0,sprite.sprite.bounds.size.y, 0) * i);
- child.transform.parent = transform;
- print ("instanciou em y");
- }
- for (int i = 1, l = (int)Mathf.Round(sprite.bounds.size.y); i <l*0.8f; i++) {
- child = Instantiate(childPrefab) as GameObject;
- child.transform.position = transform.position + (new Vector3(0,sprite.sprite.bounds.size.y, 0) * i);
- child.transform.parent = transform;
- print ("instanciou em y");
- }
- //GetComponent<BoxCollider2D>().size = new Vector2(Mathf.Round(sprite.bounds.size.x),Mathf.Round(sprite.bounds.size.y)*0.8f);
- // Set the parent last on the prefab to prevent transform displacement
- childPrefab.transform.parent = transform;
- // Disable the currently existing sprite component since its now a repeated image
- sprite.enabled = false;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement