@jcg thank you so much for the kind words! I'm glad it left such an impression! Here's a sneak peak under the hood at the button/trail interaction. It relied on getting the rectangle of the UI object and then moving in a straight line to each corner in succession.
``` IEnumerator MoveToCorner(int corner) { Rect rect = _currentParent.rect;
// Calculate the position of the corner to go to Vector2 target = corner switch { 0 => new Vector2(0, rect.height), 1 => new Vector2(rect.width, rect.height), 2 => new Vector2(rect.width, 0), 3 => new Vector2(0, 0), _ => Vector2.zero, };
// Keep moving closer until we get there while (Vector2.Distance(_rectTransform.anchoredPosition, target) > 1) { _rectTransform.anchoredPosition = Vector2.SmoothDamp(_rectTransform.anchoredPosition, target, ref _currentVelocity, .04f); yield return null; }
// It should be there now, target the next corner int nextCorner = (corner + 1) % 4; StartCoroutine(MoveToCorner(nextCorner));
} ```
When you mouse over a button, I'd run this code. When your mouse leaves the button, I'd stop it and do a similar smooth damp towards the mouse position.