using System; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; /* 根据语言自动切换图片的自定义组件 */ public class ImageAutoLanguage : MonoBehaviour { static LanguageEnum currentLanguageEnum = LanguageEnum.Chinese; static HashSet imageAutoLanguages = new HashSet(); [SerializeField] LanguageImage[] languageImages = {}; private static bool inited = false; public static void Init() { if (inited) return; inited = true; int id = PlayerPrefs.GetInt("Language", 0); ChangeLanguage((LanguageEnum) id); } public static void ChangeLanguage(LanguageEnum languageEnum) { currentLanguageEnum = languageEnum; PlayerPrefs.SetInt("Language", ((int)languageEnum)); foreach (var imageAutoLanguage in imageAutoLanguages) { try { imageAutoLanguage.ApplyToImage(); } catch (Exception e) { Debug.LogError(e.Message); } } } public static LanguageEnum GetLanguage() { Init(); return currentLanguageEnum; } void Awake() { Init(); } void Start() { imageAutoLanguages.Add(this); ApplyToImage(); } void OnDestroy() { imageAutoLanguages.Remove(this); } public void ApplyToImage() { Image imageComp = GetComponent(); bool matched = false; foreach (var languageImage in languageImages) { if (languageImage.language == currentLanguageEnum) { matched = true; imageComp.sprite = languageImage.sprite; break; } } if (!matched && languageImages.Length > 0) { imageComp.sprite = languageImages[0].sprite; } } } [Serializable] public class LanguageImage { public LanguageEnum language; public Sprite sprite; }