StickerEffect.cs 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. using System.Collections;
  2. using DG.Tweening;
  3. using UnityEngine;
  4. [RequireComponent(typeof(SpriteRenderer))]
  5. public class StickerEffect : MonoBehaviour
  6. {
  7. private Transform _cachedTransform;
  8. public Transform CachedTransform
  9. {
  10. get
  11. {
  12. if (_cachedTransform == null)
  13. _cachedTransform = transform;
  14. return _cachedTransform;
  15. }
  16. }
  17. private SpriteRenderer _cachedSpriteRenderer;
  18. public SpriteRenderer CachedSpriteRenderer
  19. {
  20. get
  21. {
  22. if (_cachedSpriteRenderer == null)
  23. _cachedSpriteRenderer = GetComponent<SpriteRenderer>();
  24. return _cachedSpriteRenderer;
  25. }
  26. }
  27. private void Awake()
  28. {
  29. CachedTransform.localScale = Vector2.zero;
  30. }
  31. private IEnumerator ShowEffectCoroutine(Sprite stickerImage, Vector2 scale, Quaternion rotate)
  32. {
  33. bool endEffect = false;
  34. CachedSpriteRenderer.sprite = stickerImage;
  35. CachedTransform.rotation = rotate;
  36. gameObject.SetActive(true);
  37. transform.DOScale(scale, 1).SetEase(Ease.InOutElastic).OnComplete(() =>
  38. {
  39. endEffect = true;
  40. });
  41. yield return new WaitUntil(() => endEffect);
  42. yield break;
  43. }
  44. public Coroutine ShowEffect(Sprite stickerImage, Vector2 scale, Quaternion roatation)
  45. {
  46. return StartCoroutine(ShowEffectCoroutine(stickerImage, scale, roatation));
  47. }
  48. }