Last active
August 29, 2015 14:11
-
-
Save NikolajDL/e57d82afc2940c0e940d to your computer and use it in GitHub Desktop.
Unity3D X-coordination sprite tiling script
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 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