Skip to content

Instantly share code, notes, and snippets.

@NikolajDL
Last active August 29, 2015 14:11
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save NikolajDL/e57d82afc2940c0e940d to your computer and use it in GitHub Desktop.
Save NikolajDL/e57d82afc2940c0e940d to your computer and use it in GitHub Desktop.
Unity3D X-coordination sprite tiling script
using System;
using System.Collections.Generic;
using UnityEngine;
using System.Collections;
[RequireComponent(typeof(SpriteRenderer))]
public class Tiling : MonoBehaviour
{
public int OffsetX = 2;
public bool ReverseScale = false;
private float SpriteWidth = 0f;
private Camera _camera;
private Transform _transform;
private Transform _rightBuddy;
private Transform _leftBuddy;
void Awake()
{
_camera = Camera.main;
_transform = transform;
}
void Start ()
{
var sRenderer = GetComponent<SpriteRenderer>();
SpriteWidth = sRenderer.sprite.bounds.size.x;
var newPositionA = new Vector3(_transform.position.x + SpriteWidth, _transform.position.y, _transform.position.z);
_rightBuddy = Instantiate(_transform, newPositionA, _transform.rotation) as Transform;
Destroy(_rightBuddy.GetComponent<Tiling>());
if (ReverseScale)
HorizontalFlip(_rightBuddy);
var newPositionB = new Vector3(_transform.position.x - SpriteWidth, _transform.position.y, _transform.position.z);
_leftBuddy = Instantiate(_transform, newPositionB, _transform.rotation) as Transform;
Destroy(_leftBuddy.GetComponent<Tiling>());
if (ReverseScale)
HorizontalFlip(_leftBuddy);
}
// Update is called once per frame
void Update () {
float camHorizontalExtend = _camera.orthographicSize*Screen.width/Screen.height;
float edgeVisiblePositionRight = (_transform.position.x + SpriteWidth + SpriteWidth / 2) - camHorizontalExtend;
float edgeVisiblePositionLeft = (_transform.position.x - SpriteWidth - SpriteWidth / 2) + camHorizontalExtend;
if (_camera.transform.position.x + OffsetX >= edgeVisiblePositionRight)
{
var newPosition = new Vector3(_rightBuddy.position.x + SpriteWidth, _rightBuddy.position.y, _rightBuddy.position.z);
_leftBuddy.position = newPosition;
if (ReverseScale)
HorizontalFlip(_leftBuddy);
var temp = _transform;
_transform = _rightBuddy;
_rightBuddy = _leftBuddy;
_leftBuddy = temp;
}
else if (_camera.transform.position.x - OffsetX <= edgeVisiblePositionLeft)
{
var newPosition = new Vector3(_leftBuddy.position.x - SpriteWidth, _leftBuddy.position.y,
_leftBuddy.position.z);
_rightBuddy.position = newPosition;
if (ReverseScale)
HorizontalFlip(_rightBuddy);
var temp = _transform;
_transform = _leftBuddy;
_leftBuddy = _rightBuddy;
_rightBuddy = temp;
}
}
void HorizontalFlip(Transform tranform)
{
tranform.localScale = new Vector3(tranform.localScale.x * -1, tranform.localScale.y, tranform.localScale.z);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment