UIParticleOptimizeReference.cs 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. namespace UIExtensions
  5. {
  6. public class UIParticleOptimizeReference : UIParticle
  7. {
  8. [SerializeField]
  9. private string shaderName;
  10. [SerializeField]
  11. private string shaderPath;
  12. [SerializeField]
  13. private Texture2D texture2D;
  14. private Material m_TempMaterial;
  15. protected override void OnEnable()
  16. {
  17. base.OnEnable();
  18. if (!m_TempMaterial)
  19. {
  20. Shader shader = ResourceMgr.Instance.FindShader(shaderName, shaderPath);
  21. if (shader)
  22. {
  23. m_TempMaterial = new Material(shader);
  24. }
  25. else
  26. {
  27. _renderer.enabled = false;
  28. }
  29. }
  30. if (m_TempMaterial)
  31. {
  32. m_TempMaterial.SetTexture("_MainTex", texture2D);
  33. _renderer.sharedMaterial = m_TempMaterial;
  34. }
  35. else
  36. {
  37. _renderer.enabled = false;
  38. }
  39. }
  40. protected override void OnDisable()
  41. {
  42. base.OnDisable();
  43. }
  44. protected override void OnDestroy()
  45. {
  46. base.OnDestroy();
  47. if (m_TempMaterial)
  48. {
  49. #if UNITY_EDITOR
  50. if (Application.isPlaying)
  51. {
  52. Destroy(m_TempMaterial);
  53. }
  54. else
  55. {
  56. DestroyImmediate(m_TempMaterial);
  57. }
  58. #else
  59. Destroy(m_TempMaterial);
  60. #endif
  61. m_TempMaterial = null;
  62. _renderer.sharedMaterial = null;
  63. }
  64. }
  65. }
  66. }