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 = {}; [SerializeField] bool resetSize; 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(); LanguageImage matchRes = null; foreach (var languageImage in languageImages) { if (languageImage.language == currentLanguageEnum) { matchRes = languageImage; break; } } if (matchRes == null && languageImages.Length > 0) { matchRes = languageImages[0]; } if (matchRes != null) { imageComp.sprite = matchRes.sprite; if (resetSize) { JCUnityLib.RectTransformUtils.SetRectTransformSize( imageComp.transform as RectTransform, matchRes.size ); } } } } [Serializable] public class LanguageImage { public LanguageEnum language; public Sprite sprite; public Vector2 size; }