using GameCore; using UnityEngine; using System.Threading.Tasks; using DG.Tweening; public class SocialRushFlyingItemView : MonoBehaviour { [SerializeField] private RewardItemNew rewardItem; public async void Fly(Vector2 startPos, Vector2 endPos, Vector2 pivot, float duration, float targetScale, ItemData item) { try { await FlyAsync(startPos, endPos, pivot, duration, targetScale, item); } catch (System.Exception e) { Debug.LogError(e); } } public async Task FlyAsync(Vector2 startPos, Vector2 endPos, Vector2 pivot, float duration, float targetScale, ItemData item) { rewardItem.SetData(item); float t = 0; transform.position = startPos; DOTween.To(() => t, v => t = v, 1, duration) .OnUpdate(() => UpdatePosition(startPos, endPos, pivot, t)); await transform.DOScale(targetScale, duration).AsyncWaitForCompletion(); Destroy(gameObject); } private void UpdatePosition(Vector2 startPos, Vector2 endPos, Vector2 pivot, float t) { transform.position = FtUtils.CalculateBezierCurve(t, startPos, pivot, endPos); } private void OnDestroy() { DOTween.Kill(this); } }