using UnityEngine; namespace AibisDream.Kit { public class RepeatTrack : MonoBehaviour { public Sprite sprite; public float width; public float moveSpeed; private SpriteRenderer _renderer1; private SpriteRenderer _renderer2; private void Start() { _renderer1 = GeneNewRenderer(); _renderer1.transform.localPosition = Vector3.zero; } private SpriteRenderer GeneNewRenderer() { var newRenderer = new GameObject().AddComponent(); newRenderer.sprite = sprite; newRenderer.transform.SetParent(transform); newRenderer.sortingOrder = 5; newRenderer.sortingLayerName = "FixMiddle"; newRenderer.maskInteraction = SpriteMaskInteraction.VisibleInsideMask; return newRenderer; } public void Update() { // Debug.Log("render" + _renderer1); // Debug.Log("bounds" + _renderer1.bounds); // Debug.Log("size" + _renderer1.bounds.size); var spriteWidth = _renderer1.bounds.size.x; if (-_renderer1.transform.localPosition.x + width > spriteWidth && !_renderer2) { // 可以新建下一个了 _renderer2 = GeneNewRenderer(); _renderer2.transform.localPosition = new Vector3(width, 0, 0); } if (-_renderer1.transform.localPosition.x > spriteWidth) { Destroy(_renderer1.gameObject); _renderer1 = _renderer2; _renderer2 = null; } _renderer1.transform.localPosition = new Vector3(_renderer1.transform.localPosition.x + moveSpeed * Time.deltaTime, 0, 0); if (_renderer2) { _renderer2.transform.localPosition = new Vector3(_renderer2.transform.localPosition.x + moveSpeed * Time.deltaTime, 0, 0); } } } }