EffectUI.cs 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. using System;
  2. using FairyGUI;
  3. using UnityEngine;
  4. namespace GFGGame
  5. {
  6. public class EffectUI
  7. {
  8. private GameObject _gameObject;
  9. private GoWrapper _wrapper;
  10. public bool Released;
  11. public bool IsLoaded { get; private set; }
  12. public void Reset(GGraph holder, string uiName, string resName, float scale = 100,
  13. EffectUIType effectUIType = EffectUIType.UI, Action<bool> onComplete = null)
  14. {
  15. if (!Released) Release();
  16. Released = false;
  17. IsLoaded = false;
  18. string resPath;
  19. switch (effectUIType)
  20. {
  21. case EffectUIType.Card:
  22. resPath = ResPathUtil.GetCardAnimationPath(resName);
  23. break;
  24. default:
  25. resPath = ResPathUtil.GetViewEffectPath(uiName, resName);
  26. break;
  27. }
  28. PrefabManager.Instance.SpawnAsync(resPath, (go) =>
  29. {
  30. if (go == null || Released) // 检查是否已被释放
  31. {
  32. onComplete?.Invoke(false);
  33. return;
  34. }
  35. _gameObject = go;
  36. _gameObject.transform.localScale = new Vector3(scale, scale, scale);
  37. _wrapper = new GoWrapper(_gameObject);
  38. holder.SetNativeObject(_wrapper);
  39. var obj = _gameObject.GetComponent<BoxCollider2D>();
  40. if (obj != null)
  41. {
  42. CardDataManager.CardResInitWidth = (int)(obj.size.x * 100);
  43. CardDataManager.CardResInitHight = (int)(obj.size.y * 100);
  44. holder.x = CardDataManager.CardResInitWidth / 2 - obj.offset.x * 100;
  45. holder.y = CardDataManager.CardResInitHight / 2 - obj.offset.y * 100;
  46. }
  47. IsLoaded = true;
  48. onComplete?.Invoke(true);
  49. });
  50. }
  51. public void Release()
  52. {
  53. Released = true;
  54. if (_gameObject != null)
  55. {
  56. PrefabManager.Instance.Restore(_gameObject);
  57. //GameObject.DestroyImmediate(_gameObject);
  58. _gameObject = null;
  59. }
  60. if (_wrapper != null)
  61. {
  62. if (_wrapper.wrapTarget != null)
  63. {
  64. _wrapper.wrapTarget = null;
  65. }
  66. _wrapper.Dispose();
  67. _wrapper = null;
  68. }
  69. IsLoaded = false;
  70. }
  71. public GameObject GetObj()
  72. {
  73. return _gameObject;
  74. }
  75. }
  76. }