ImageAutoLanguage.cs 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  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. private static bool inited = false;
  12. public static void Init()
  13. {
  14. if (inited) return;
  15. inited = true;
  16. int id = PlayerPrefs.GetInt("Language", 0);
  17. ChangeLanguage((LanguageEnum) id);
  18. }
  19. public static void ChangeLanguage(LanguageEnum languageEnum)
  20. {
  21. currentLanguageEnum = languageEnum;
  22. PlayerPrefs.SetInt("Language", ((int)languageEnum));
  23. foreach (var imageAutoLanguage in imageAutoLanguages)
  24. {
  25. try {
  26. imageAutoLanguage.ApplyToImage();
  27. } catch (Exception e) { Debug.LogError(e.Message); }
  28. }
  29. }
  30. public static LanguageEnum GetLanguage()
  31. {
  32. Init();
  33. return currentLanguageEnum;
  34. }
  35. void Awake()
  36. {
  37. Init();
  38. }
  39. void Start()
  40. {
  41. imageAutoLanguages.Add(this);
  42. ApplyToImage();
  43. }
  44. void OnDestroy()
  45. {
  46. imageAutoLanguages.Remove(this);
  47. }
  48. public void ApplyToImage()
  49. {
  50. Image imageComp = GetComponent<Image>();
  51. bool matched = false;
  52. foreach (var languageImage in languageImages)
  53. {
  54. if (languageImage.language == currentLanguageEnum)
  55. {
  56. matched = true;
  57. imageComp.sprite = languageImage.sprite;
  58. break;
  59. }
  60. }
  61. if (!matched && languageImages.Length > 0) {
  62. imageComp.sprite = languageImages[0].sprite;
  63. }
  64. }
  65. }
  66. [Serializable]
  67. public class LanguageImage {
  68. public LanguageEnum language;
  69. public Sprite sprite;
  70. }