ImageAutoLanguage.cs 1.9 KB

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