| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- using System;
- using System.Collections.Generic;
- using UnityEngine;
- using UnityEngine.UI;
- /* 根据语言自动切换图片的自定义组件 */
- public class ImageAutoLanguage : MonoBehaviour
- {
- static LanguageEnum currentLanguageEnum = LanguageEnum.Chinese;
- static HashSet<ImageAutoLanguage> imageAutoLanguages = new HashSet<ImageAutoLanguage>();
- [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<Image>();
- 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;
- }
|