This commit is contained in:
2026-09-06 15:51:51 +08:00
parent a5a26714e4
commit 0887d61c5e
18 changed files with 343 additions and 1455 deletions
+12 -12
View File
@@ -951,7 +951,8 @@ public class SitPosData : MonoBehaviour, IPointerDownHandler, IPointerUpHandler
}
/// <summary>
/// 显示文字表情:先激活 ziObj,延迟一帧再设置 child0(TextMeshProUGUI)的文字,
/// 显示文字表情:先设置文字再激活 ziObj,激活后立即强制刷新两级 ContentSizeFitter
/// (child0 的 TMP 自身 + 父物体),避免宽度延迟一帧才更新。
/// biaoQingDuration 秒后自动隐藏。与 spine 表情互斥(同时只显示一种)。
/// </summary>
/// <param name="text">文字内容</param>
@@ -967,19 +968,18 @@ public class SitPosData : MonoBehaviour, IPointerDownHandler, IPointerUpHandler
if (spineObj != null) spineObj.SetActive(false);
if (_biaoQingCoroutine != null) { StopCoroutine(_biaoQingCoroutine); _biaoQingCoroutine = null; }
// ⭐ 先激活,延迟一帧再设置字体:TMP 激活当帧设置 text 可能不刷新(显示旧字/默认字)
// ⭐ 先设置字,再激活:TMP 非激活时改字不会向布局系统注册重建,激活后统一处理
tmp.text = text;
ziObj.SetActive(true);
_biaoQingCoroutine = StartCoroutine(ShowBiaoQingZiRoutine(tmp, text));
}
/// <summary>文字表情协程:延迟一帧设置文字 → 显示 biaoQingDuration 秒 → 自动隐藏</summary>
private IEnumerator ShowBiaoQingZiRoutine(TextMeshProUGUI tmp, string text)
{
yield return null; // 等一帧,激活完成后再改字
if (tmp != null) tmp.text = text;
yield return new WaitForSeconds(biaoQingDuration);
if (ziObj != null) ziObj.SetActive(false);
_biaoQingCoroutine = null;
// ⭐ 激活后立即按"先子后父"顺序强制刷新两级 ContentSizeFitter:
// 子级 TMP 先算出新宽度,父级 Fitter 再根据子级新宽度收缩,
// 否则布局要等帧末才重建,当帧读到的还是旧宽度
LayoutRebuilder.ForceRebuildLayoutImmediate(tmp.rectTransform);
LayoutRebuilder.ForceRebuildLayoutImmediate(ziObj.transform as RectTransform);
Canvas.ForceUpdateCanvases();
_biaoQingCoroutine = StartCoroutine(HideBiaoQingAfter(ziObj));
}
/// <summary>表情显示 biaoQingDuration 秒后自动隐藏</summary>