using AppUI.Config; using AppUI.Localization; using TMPro; using UnityEngine; namespace AppUI.Component.DeviceInfo { /// /// 版本行等需要运行时参数(平台、版本号)的文案。 /// 与同一 TMP 上的 配合:Prefab 配 textKey,本脚本只填 。 /// [ExecuteAlways] public class DeviceInfo : MonoBehaviour { const string VersionTextKey = "appui-login-version"; [SerializeField] TMP_Text deviceInfo; AppUITextAutoLanguage _versionLocalized; void Awake() { ResolveReferences(); } void OnEnable() { AppUILocalization.OnLanguageChanged += RefreshVersionText; RefreshVersionText(AppUILocalization.GetLanguage()); } void Start() { RefreshVersionText(AppUILocalization.GetLanguage()); } void OnDisable() { AppUILocalization.OnLanguageChanged -= RefreshVersionText; } #if UNITY_EDITOR void OnValidate() { ResolveReferences(); if (!Application.isPlaying) RefreshVersionText(AppUILocalization.GetLanguage()); } #endif void ResolveReferences() { if (deviceInfo == null) deviceInfo = GetComponentInChildren(true); if (deviceInfo != null) _versionLocalized = deviceInfo.GetComponent(); } void RefreshVersionText(LanguageEnum _) { string platform = GlobalConfig.GetPlatformDisplayName(); string version = Application.version; #if UNITY_EDITOR if (!Application.isPlaying && string.IsNullOrEmpty(version)) version = "1.0.0"; #endif if (_versionLocalized != null) { _versionLocalized.textFormatArgs = new object[] { platform, version }; if (string.IsNullOrEmpty(_versionLocalized.GetTextKey())) _versionLocalized.SetTextKey(VersionTextKey); else _versionLocalized.ApplyToText(); return; } if (deviceInfo == null) return; deviceInfo.text = string.Format( AppUILocalization.GetTextByKey(VersionTextKey), platform, version); } } }