ImageAutoLanguage.cs 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. using System;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using UnityEngine.UI;
  5. /* 根据语言自动切换图片的自定义组件 */
  6. public class ImageAutoLanguage : MonoBehaviour
  7. {
  8. static LanguageEnum currentLanguageEnum = LanguageEnum.Chinese;
  9. static HashSet<ImageAutoLanguage> imageAutoLanguages = new HashSet<ImageAutoLanguage>();
  10. [SerializeField] LanguageImage[] languageImages = {};
  11. [SerializeField] bool resetSize;
  12. private static bool inited = false;
  13. public static void Init()
  14. {
  15. if (inited) return;
  16. inited = true;
  17. int id = PlayerPrefs.GetInt("Language", 0);
  18. ChangeLanguage((LanguageEnum) id);
  19. }
  20. public static void ChangeLanguage(LanguageEnum languageEnum)
  21. {
  22. currentLanguageEnum = languageEnum;
  23. PlayerPrefs.SetInt("Language", ((int)languageEnum));
  24. foreach (var imageAutoLanguage in imageAutoLanguages)
  25. {
  26. try {
  27. imageAutoLanguage.ApplyToImage();
  28. } catch (Exception e) { Debug.LogError(e.Message); }
  29. }
  30. }
  31. public static LanguageEnum GetLanguage()
  32. {
  33. Init();
  34. return currentLanguageEnum;
  35. }
  36. void Awake()
  37. {
  38. Init();
  39. }
  40. void Start()
  41. {
  42. imageAutoLanguages.Add(this);
  43. ApplyToImage();
  44. }
  45. void OnDestroy()
  46. {
  47. imageAutoLanguages.Remove(this);
  48. }
  49. public void ApplyToImage()
  50. {
  51. Image imageComp = GetComponent<Image>();
  52. LanguageImage matchRes = null;
  53. foreach (var languageImage in languageImages)
  54. {
  55. if (languageImage.language == currentLanguageEnum)
  56. {
  57. matchRes = languageImage;
  58. break;
  59. }
  60. }
  61. if (matchRes == null && languageImages.Length > 0) {
  62. matchRes = languageImages[0];
  63. }
  64. if (matchRes != null) {
  65. imageComp.sprite = matchRes.sprite;
  66. if (resetSize) {
  67. JCUnityLib.RectTransformUtils.SetRectTransformSize(
  68. imageComp.transform as RectTransform, matchRes.size
  69. );
  70. }
  71. }
  72. }
  73. }
  74. [Serializable]
  75. public class LanguageImage {
  76. public LanguageEnum language;
  77. public Sprite sprite;
  78. public Vector2 size;
  79. }