Files
aibis-dream/Assets/Scripts/Framework/PlayKit/RepeatTrack.cs
T
2025-05-14 13:03:08 +08:00

61 lines
2.0 KiB
C#

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<SpriteRenderer>();
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);
}
}
}
}