using System.Collections; using UnityEngine; using TMPro; public class Coin : MonoBehaviour { public CoinFlipUI flipUI; public TextMeshProUGUI coinText; [Header("Flying Coins")] public CoinFlipUI smallCoinPrefab; // префаб монетки (CoinFlipUI) public int spawnCount = 10; // сколько спавнить public float spawnRadius = 30f; // разброс старта public float fallDistance = 100f; // расстояние вниз public float duration = 0.8f; // длительность анимации public void FreezeCoin() { if (flipUI != null) flipUI.FreezeCoin(); } public void UnfreezeCoin() { if (flipUI != null) flipUI.UnfreezeCoin(); } // Обновляем текст public void ChangeCoinText(string text) { if (coinText != null) coinText.text = text; } // -------------------- Анимация пополнения -------------------- public void PlayAddCoinsAnimation() { if (smallCoinPrefab == null || flipUI == null) return; RectTransform parentRt = flipUI.GetComponent(); for (int i = 0; i < spawnCount; i++) { CoinFlipUI coin = Instantiate(smallCoinPrefab, parentRt.parent); // спавним в том же контейнере, что и flipUI RectTransform rt = coin.GetComponent(); // стартовая позиция = позиция большой монеты rt.position = parentRt.position; // уменьшаем монетку в 3 раза rt.localScale = smallCoinPrefab.transform.localScale * 0.33f; // добавляем случайное смещение вокруг большой монеты Vector2 randomOffset = Random.insideUnitCircle * spawnRadius; rt.anchoredPosition += randomOffset; // запускаем анимацию StartCoroutine(FlyAndShrinkRoutine(rt)); } } private IEnumerator FlyAndShrinkRoutine(RectTransform rt) { Vector2 startPos = rt.anchoredPosition; Vector2 endPos = startPos - new Vector2(0, fallDistance); Vector3 startScale = rt.localScale; Vector3 endScale = Vector3.zero; float elapsed = 0f; while (elapsed < duration) { elapsed += Time.deltaTime; float t = elapsed / duration; rt.anchoredPosition = Vector2.Lerp(startPos, endPos, t); rt.localScale = Vector3.Lerp(startScale, endScale, t); // делаем прозрачность var img = rt.GetComponent(); if (img != null) { var c = img.color; c.a = Mathf.Lerp(1f, 0f, t); img.color = c; } yield return null; } Destroy(rt.gameObject); } }