You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity中LocalizeStringEvent动态更新本地化文本失效问题排查

问题原因分析
  1. LocalizedString实例频繁重建导致监听失效:每次调用SetWorldMessage都新建LocalizedString对象,原有的与TextMeshPro的绑定监听会因实例替换中断,即便worldMessageEvent内部字符串已更新,也无法通知TextMeshPro刷新显示。
  2. TextMeshPro未绑定LocalizedString的更新事件:若worldMessageEvent未将TextMeshPro组件与LocalizedString的StringChanged事件关联,仅设置StringReference无法触发UI自动同步。
优雅解决方案

方案1:复用LocalizedString实例(推荐)

避免重复创建实例,通过复用同一LocalizedString对象维护绑定关系,仅更新key和参数:

// 类成员变量,复用同一个LocalizedString实例
private LocalizedString _worldLocalizedString;

private void Awake()
{
    // 初始化LocalizedString,绑定表格引用
    _worldLocalizedString = new LocalizedString(TABLE_REFERENCE, string.Empty);
    // 订阅字符串变更事件,自动同步到TextMeshPro
    _worldLocalizedString.StringChanged += UpdateWorldMessageText;
    // 将复用实例赋值给事件的StringReference
    worldMessageEvent.StringReference = _worldLocalizedString;
}

private void UpdateWorldMessageText(string updatedText)
{
    // 更新关联的TextMeshProUGUI组件文本
    worldMessageEvent.GetComponent<TextMeshProUGUI>().text = updatedText;
}

private void SetWorldMessage(string key)
{
    // 更新本地化key
    _worldLocalizedString.TableEntryReference = key;
    // 清空旧参数并添加新参数
    _worldLocalizedString.Arguments.Clear();
    _worldLocalizedString.Arguments.Add(WORLD_MESSAGE_ARGUMENT, currentWave);
    // 触发字符串刷新
    _worldLocalizedString.RefreshString();
}

方案2:兼容现有逻辑的强制刷新

若不想修改实例复用逻辑,可在刷新字符串后主动触发TextMeshPro的UI更新,比直接赋值更贴合本地化系统用法:

private void SetWorldMessage(string key)
{
    LocalizedString localizedString = new(TABLE_REFERENCE, key)
    {
        { WORLD_MESSAGE_ARGUMENT, currentWave }
    };
    worldMessageEvent.StringReference = localizedString;
    worldMessageEvent.StringReference.RefreshString();
    
    // 主动获取关联组件并刷新UI
    var textMesh = worldMessageEvent.GetComponent<TextMeshProUGUI>();
    if (textMesh != null)
    {
        textMesh.text = worldMessageEvent.StringReference.GetLocalizedString();
        textMesh.ForceMeshUpdate();
    }
}

方案3:检查Unity Localization系统配置

  • 确保LocalizationSettings已正确配置,本地化表格加载正常。
  • 若worldMessageEvent是LocalizeStringEvent组件,确认已绑定目标TextMeshProUGUI——该组件会自动订阅StringChanged事件并更新UI,无需手动处理。

内容的提问来源于stack exchange,提问作者Xetiam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 12:21:18