动态显示和隐藏字母
你可以使用打字机效果动态显示和隐藏字母, 为各种字符(标点、字母、[…])选择不同的暂停时间、触发事件等。
显示文本
该 打字机包含通用设置和事件监听器,并支持不同的暂停/计时模式:
按字符:逐字显示。
按单词:逐词推进文本。
这种新的架构(自 3.0 起)允许你在开发过程中因任何原因更改打字机的计时,同时保持事件引用和设置不变!<3
你的打字机应如下所示:
在检查器中的 TypewriterComponent 里:

在 UI Builder 中的 AnimatedLabel 里:

请确保已分配 timings ScriptableObject,否则打字机将立即显示整段文本!
你可以通过两种主要方式启动打字机:
A) 通过代码(推荐)
如果你想使用打字机, 建议你通过代码直接将文本设置到该组件。
如果你使用的是 TextMeshPro,请将引用 TMPro 或 Text Animator(设置文本)的脚本替换为引用 Febucci.TextAnimatorForUnity.TypewriterComponent 。
❌ 不要:“
tmproText.text = textValue;”,或“textAnimator.SetText(textValue);"✅ 应当:
typewriter.ShowText(textValue);
通过 UI Toolkit, AnimatedLabel 已经有一个“Typewriter”值可供你交互!
你无需做任何其他操作,只需确保已分配打字机延迟。
B) 自动识别
如果你没有按上面的步骤操作,只要你添加了 Typewriter 组件,或在 UI Toolkit 的 AnimatedLabel 中设置了“Timings”,TextAnimator 仍会尝试自动启动打字机。
Easy Integration 可能会延后一帧发生(因为它必须先发现某些内容已发生变化,而这通常是在上一帧完成的,然后才启动打字机)。如果这会造成问题,请执行步骤 A) 通过代码(推荐),或者查看 故障排除
控制字母
开始和停止输入
在该组件的检查器中,你会找到一些选项,用于控制打字机的启动触发方式:
启动打字机模式:告诉打字机何时开始显示字母。
仅通过脚本
打字机只能通过调用 TextAnimatorPlayer.StartShowingText()
OnEnable
每次 gameObject 设为激活时,打字机都会启动
OnShowText
一旦设置了新文本,打字机就会立即启动(如“显示文本”部分所述)
从所有事件自动启动
以上全部
启动时重置打字速度:如果你希望每次显示新文本时打字机速度都重置为 1,则设为 true;否则将保留上一次使用的速度。
你可以随时通过调用以下方法暂停打字机: typewriter.StopShowingText(),并且可以通过调用以下方法开始/继续它: typewriter.StartShowingText().
跳过整段文本
要跳过整个打字机效果,可以调用 typewriter.SkipTypewriter() 方法。
你还可以找到一些用于控制其行为的选项:
跳过时隐藏出现效果:如果你希望在打字机跳过时不播放出现效果,则设为 true(这意味着文本会立即显示)。跳过时触发事件:如果你希望在打字机跳过后触发所有剩余事件,则设为 true(如果这些事件包含游戏逻辑,请谨慎使用,因为所有内容都会一次性执行)。更多关于事件的信息请见: 打字时触发事件
跳过文本的特定部分
该功能正在 3.0 中测试,并将在下一个版本很快恢复!感谢你的理解!
隐藏文本
你可以通过脚本动态隐藏字母,调用 typewriter.StartDisappearingText(),并且也可以随时通过调用以下方法停止: typewriter.StopDisappearingText().
你可以创建自己的计时等待(阅读 这里 了解如何通过 C# 实现),或者使用内置的等待方式。
选项
不同打字机可能共享相同的设置,也可能有各自特定的设置,因此请务必将鼠标悬停在检查器中的字段上,以显示每个字段的提示。
下面是最重要/最常见选项的简要概览:
回调(Unity 事件)
你可以使用会根据打字机活动触发的 Unity 事件(例如:刚结束显示文本时)。

OnTextShowed
整段文本显示完毕后调用的事件(如果你将“Use Typewriter”设为 true,它会等待直到所有字母都显示完毕)
OnTextDisappeared
脚本一开始隐藏最后一个字母时立即调用
以下内容仅在“use typewriter” 设置为 true:
OnTypewriterStart
在打字机开始显示第一个字母之前立即调用。 如果打字机关闭,则不起作用,因为这会与 “OnTextShowed” 事件重合 (在这种情况下你可以改用那个事件)
OnCharacterVisible(Char)
每当一个字符变为可见时调用
OnMessage(EventMarker)
每当打字机在文本中遇到消息/事件时触发。更多关于事件的信息 这里
打字机使用其关联的 Text Animator 时间缩放 来推进时间(你可以在这里了解更多: 动画器设置),这意味着如果时间设置为“Unscaled”,那么即使游戏暂停,打字机也会继续推进。