592 多语言适配 TextLanguageAdapterEditor支持手动设置目标组件和组件类型,避免复制TextLanguageAdapterEditor组件时目标组件还锁在旧的组件上无法设置
1个文件已修改
58 ■■■■ 已修改文件
Main/Component/UI/Core/TextLanguageAdapter.cs 58 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Component/UI/Core/TextLanguageAdapter.cs
@@ -156,11 +156,20 @@
    private bool m_IsApplied = false;
    public TextComponentType TargetTextType => m_TargetTextType;
    public Component TargetTextComponent => m_TargetTextComponent;
    // 开放 set 权限,允许外部或编辑器手动赋值
    public TextComponentType TargetTextType
    {
        get => m_TargetTextType;
        set => m_TargetTextType = value;
    }
    public Component TargetTextComponent
    {
        get => m_TargetTextComponent;
        set => m_TargetTextComponent = value;
    }
    public LanguageConfigDictionary LanguageConfigs => m_LanguageConfigs;
    private void Awake() => DetectTargetComponent();
    private void OnEnable()
    {
@@ -170,14 +179,6 @@
            ApplyConfig(langId);
        }
    }
#if UNITY_EDITOR
    private void Reset()
    {
        DetectTargetComponent();
        if (!HasConfig(DefaultLangId)) ReadCurrentToConfig(DefaultLangId);
    }
#endif
    public LanguageConfigItem GetConfig(string languageId) => m_LanguageConfigs.Get(languageId);
    public void SetConfig(string languageId, LanguageConfigItem config) => m_LanguageConfigs.Set(languageId, config);
@@ -212,40 +213,7 @@
        return languageId;
    }
    private void DetectTargetComponent()
    {
        if (m_TargetTextComponent != null)
        {
            DetermineTextType(m_TargetTextComponent);
            return;
        }
        m_TargetTextComponent = GetComponent<GradientText>() ?? GetComponentInChildren<GradientText>(true) as Component
                                ?? GetComponent<TextEx>() ?? GetComponentInChildren<TextEx>(true) as Component
                                ?? GetComponent<Text>() ?? GetComponentInChildren<Text>(true) as Component;
        DetermineTextType(m_TargetTextComponent);
    }
    private void DetermineTextType(Component component)
    {
        m_TargetTextType = component switch
        {
            GradientText _ => TextComponentType.GradientText,
            TextEx _ => TextComponentType.TextEx,
            Text _ => TextComponentType.Text,
            _ => TextComponentType.None
        };
    }
#if UNITY_EDITOR
    [ContextMenu("刷新组件检测")]
    public void Editor_ForceRefreshDetection()
    {
        DetectTargetComponent();
        UnityEditor.EditorUtility.SetDirty(this);
    }
    [ContextMenu("读取当前配置")]
    public void Editor_ReadCurrentConfig()
    {