阶段性完成
This commit is contained in:
@@ -2,6 +2,7 @@ using System.Collections.Generic;
|
||||
using Ichni.Story.Dialogue;
|
||||
using TMPro;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Localization;
|
||||
using UnityEngine.UI;
|
||||
|
||||
namespace Ichni.Story.UI
|
||||
@@ -24,6 +25,21 @@ namespace Ichni.Story.UI
|
||||
// 当前已实例化的状态背景对象;状态切换时销毁并替换
|
||||
private GameObject _currentVisual;
|
||||
|
||||
// 直接持有 StoryData 的 LocalizedString,并订阅其 StringChanged 回调。
|
||||
// Unity Localization 会在首次订阅和语言切换时自行异步刷新文本。
|
||||
private LocalizedString _titleReference;
|
||||
private bool _isTitleLocalizationSubscribed;
|
||||
|
||||
private void OnEnable()
|
||||
{
|
||||
StartTitleLocalization();
|
||||
}
|
||||
|
||||
private void OnDisable()
|
||||
{
|
||||
StopTitleLocalization();
|
||||
}
|
||||
|
||||
public override void Initialize(StoryBlockDefinition def, Vector2 position, StoryBlockState blockState)
|
||||
{
|
||||
// 注意:base.Initialize 末尾会调用 ApplyState(state),届时已生成对应背景
|
||||
@@ -34,9 +50,43 @@ namespace Ichni.Story.UI
|
||||
if (storyIdText != null)
|
||||
storyIdText.text = def.blockId;
|
||||
|
||||
// 当前仍直接显示 titleKey;正式内容接入时需要由 Unity Localization 解析玩家可见标题。
|
||||
StopTitleLocalization();
|
||||
_titleReference = def.title;
|
||||
StartTitleLocalization();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 订阅当前 TextBlock 的 LocalizedString。无需手写 Table / Key 读取或监听全局 Locale,
|
||||
/// LocalizedString 会遵循 Unity 官方生命周期异步加载,并在语言变化后触发 StringChanged。
|
||||
/// </summary>
|
||||
private void StartTitleLocalization()
|
||||
{
|
||||
if (_isTitleLocalizationSubscribed || titleText == null)
|
||||
return;
|
||||
|
||||
if (_titleReference == null || _titleReference.IsEmpty)
|
||||
{
|
||||
titleText.text = blockId;
|
||||
return;
|
||||
}
|
||||
|
||||
_titleReference.StringChanged += ApplyLocalizedTitle;
|
||||
_isTitleLocalizationSubscribed = true;
|
||||
}
|
||||
|
||||
private void StopTitleLocalization()
|
||||
{
|
||||
if (!_isTitleLocalizationSubscribed || _titleReference == null)
|
||||
return;
|
||||
|
||||
_titleReference.StringChanged -= ApplyLocalizedTitle;
|
||||
_isTitleLocalizationSubscribed = false;
|
||||
}
|
||||
|
||||
private void ApplyLocalizedTitle(string localizedTitle)
|
||||
{
|
||||
if (titleText != null)
|
||||
titleText.text = def.titleKey;
|
||||
titleText.text = string.IsNullOrEmpty(localizedTitle) ? blockId : localizedTitle;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
Reference in New Issue
Block a user