FixUIShader.cs 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using UnityEngine.UI;
  5. /// <summary>
  6. /// 修正UIshader
  7. /// </summary>
  8. public class FixUIShader : MonoBehaviour
  9. {
  10. private List<Material> imageMaterials = new List<Material>();
  11. private List<string> imageShaders = new List<string>();
  12. private List<Material> rawImageMaterials = new List<Material>();
  13. private List<string> rawImageShaders = new List<string>();
  14. private List<Material> spriteMaterial = new List<Material>();
  15. private List<string> spriteShaders = new List<string>();
  16. /// <summary>
  17. /// 时间
  18. /// </summary>
  19. private float mTime = 0;
  20. private void Awake()
  21. {
  22. imageMaterials.Clear();
  23. imageShaders.Clear();
  24. rawImageMaterials.Clear();
  25. rawImageShaders.Clear();
  26. spriteMaterial.Clear();
  27. spriteShaders.Clear();
  28. Image[] imgs = GetComponentsInChildren<Image>(true);
  29. int length = imgs.Length;
  30. for (int i = 0; i < length; i++)
  31. {
  32. Material _mater = imgs[i].material;
  33. imageMaterials.Add(_mater);
  34. imageShaders.Add(_mater.shader.name);
  35. }
  36. RawImage[] rawImgs = GetComponentsInChildren<RawImage>(true);
  37. length = rawImgs.Length;
  38. for (int i = 0; i < length; i++)
  39. {
  40. Material _mater = rawImgs[i].material;
  41. rawImageMaterials.Add(_mater);
  42. rawImageShaders.Add(_mater.shader.name);
  43. }
  44. SpriteRenderer[] spr = GetComponentsInChildren<SpriteRenderer>(true);
  45. int sprLength = spr.Length;
  46. for (int i = 0; i < sprLength; i++)
  47. {
  48. Material _ms = spr[i].material;
  49. spriteMaterial.Add(_ms);
  50. spriteShaders.Add(_ms.shader.name);
  51. }
  52. }
  53. void Start()
  54. {
  55. for (int i = 0; i < imageMaterials.Count; i++)
  56. {
  57. imageMaterials[i].shader = Shader.Find(imageShaders[i]);
  58. }
  59. for (int i = 0; i < rawImageMaterials.Count; i++)
  60. {
  61. rawImageMaterials[i].shader = Shader.Find(rawImageShaders[i]);
  62. }
  63. for (int i = 0; i < spriteMaterial.Count; i++)
  64. {
  65. spriteMaterial[i].shader = Shader.Find(spriteShaders[i]);
  66. }
  67. }
  68. private void OnEnable()
  69. {
  70. mTime = Time.time;
  71. }
  72. private void OnDisable()
  73. {
  74. int diffTime = (int)(Time.time - mTime);
  75. if (diffTime <= 0)
  76. {
  77. return;
  78. }
  79. // 友盟统计: 页面统计
  80. AndroidInteractive.CallJavaFunction("onEvent", "e_page_stay", "page_nameText", gameObject.name+"_"+diffTime.ToString());
  81. }
  82. }