最佳实践

查找使用 Text Animator for Unity 时的所有常见最佳实践。

每个项目都不同,但在本页你可以找到一些常见的最佳实践,帮助你更好地设置一切并避免大多数常见问题!

在代码中使用 Text Animator 的“SetText/ShowText”方法,而不是 TMPro

如果你通过代码设置文本,请直接使用 Text Animator 或其打字机,而不是 TextMeshPro。

// 一些代码
TMP_Text tmpText;
Febucci.UI.Core.TAnimCore textAnimator;
Febucci.UI.Core.TypewriterCore typewriter;

// [...] 这样做
textAnimator.SetText(value); // 立即设置文本
//或者 
typewriter.ShowText(value); // 如果你有打字机则使用它来设置文本

参考 API: textAnimator.SetText, typewriter.ShowText


只设置整个文本/对话一次

请尽量只设置文本一次,使用打字机/可见性方法来控制它如何出现。

如果你确实需要稍后追加文本,可以使用 "textAnimator.AppendText" 方法。

示例

如果有个角色说 “Helloooo how are you doing?”,并且你想逐字显示它,只需: typewriter.ShowText("Hellooooo how are you doing?"); 就这样! 动态显示和隐藏字母


如果你正在构建一个动态字符串,仍然可以在将其值设置给打字机/动画器之前完成构建。

int apples = 5; // 稍后从游戏状态获取
string playerName = "Bob";

// 先构建整个对话行
string dialogue = $"Hello {playerName}, you've got {apples} apples";

// 然后只设置文本一次
typewriter.ShowText(dialogue);

(如果你使用对话系统,他们会为你处理这些——不用担心! 集成)

为什么我应该一次性设置整个文本,而不是逐字符设置?

性能!(即使你没有使用 Text Animator。)

每次设置文本时,TextMeshPro 都需要计算其网格、定位等,而 Text Animator 之后还要重新计算字符持续时间等。这意味着如果你每秒多次更改它(例如逐渐添加字母),这些计算会每次都进行。

要逐个显示字符,你只需将完整文本设置一次,然后启动打字机: 动态显示和隐藏字母


使用 TextAnimator 的“ScheduleMeshRefresh”而不是 TMPro.ForceMeshUpdate()

如果你调用 "tmpText.ForceMeshUpdate",TextAnimator 可能会丢失一些引用,导致字母显示不正确。如果文本发生了变化以至于你想调用该函数,请尝试改为调用 TextAnimator 的 "ScheduleMeshRefresh"![脚本 API] 它将在下一帧执行该方法,但会保持所有引用不变。


如果你在文本检查器中更改了某些内容但没有得到更新,请告诉我们!

最后更新于