using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class UILocalizeTexture : MonoBehaviour { public string lgKey; public string key; private Image mImage; private long loadSeq; string oldname; LocalizedSpriteCfg spriteCfg; private void Awake() { oldname = ""; loadSeq = 0; mImage = GetComponent(); EventMgr.AddEventListener(ECoreEventType.EID_LANGUAGE_CHANGE,OnLanguageChange); } private void OnLanguageChange(CoreEvent e) { Refresh(); } // Start is called before the first frame update private void Start() { Refresh(); } // Update is called once per frame private void Update() { } private void OnDestroy() { Dispose(); EventMgr.RemoveEventListener(ECoreEventType.EID_LANGUAGE_CHANGE, OnLanguageChange); } public void Refresh() { if (string.IsNullOrEmpty(key) || mImage == null) return; if (string.IsNullOrEmpty(lgKey)) { spriteCfg = LocalizedTextureCfgMgr.Instance.GetLocalizedSpriteCfg(key); } else { spriteCfg = LocalizedTextureCfgMgr.Instance.GetCfgByLgkey(lgKey,key); } if (spriteCfg == null || oldname == spriteCfg.Language) { return; } oldname = spriteCfg.Language; loadSeq = ResourceMgr.Instance.LoadAsset(OnLoadEnd, spriteCfg.AssetPath, spriteCfg.Language); } private void OnLoadEnd(Sprite sp, string assetPath, params string[] assetNames) { //mImage.sprite.name; mImage.sprite = sp; if (spriteCfg.GetSetNativeSize()) { mImage.SetNativeSize(); } SerizedOtherCfg(); } public void SetKey(string _key) { key = _key; Refresh(); } public void Dispose() { if (loadSeq > 0) { ResourceMgr.Instance.UnloadAssetBySeqId(loadSeq); loadSeq = 0; } } private void SerizedOtherCfg() { if (string.IsNullOrEmpty(spriteCfg.OtherSetting)) { return; } string[] datas_1 = spriteCfg.OtherSetting.Split(";",StringSplitOptions.RemoveEmptyEntries); for (int i = 0; i < datas_1.Length; i++) { string[] datas_2 = datas_1[i].Split("_", StringSplitOptions.RemoveEmptyEntries); if (datas_2.Length < 2) { continue; } int type = -1; if (!int.TryParse(datas_2[0],out type)) { continue; } string[] datas_3 = datas_2[1].Split(":", StringSplitOptions.RemoveEmptyEntries); if (datas_3.Length < 2) { continue; } int x; int y; int z; if (!int.TryParse(datas_3[0], out x)) { continue; } if (!int.TryParse(datas_3[1], out y)) { continue; } if (datas_3.Length < 3) { SetImage(type, new Vector3(x,y)); } else if ( int.TryParse(datas_3[2], out z)) { SetImage(type, new Vector3(x, y, z)); } } } /// /// /// /// 1 local pos ; 2 rotation ; 3 scale 4 size /// private void SetImage(int type, Vector3 data) { RectTransform rectTransform = transform as RectTransform; if (rectTransform == null ) { return; } switch (type) { case 1: { Vector3 lp = rectTransform.localPosition; lp.x = data.x; lp.y = data.y; rectTransform.localPosition = lp; } break; case 2: { rectTransform.localRotation = Quaternion.Euler(data); } break; case 3: { rectTransform.localScale = data; } break; case 4: { rectTransform.sizeDelta = new Vector2(data.x, data.y); } break; default: break; } } }