动态显示和隐藏字母

你可以使用打字机动态显示和隐藏字母, 为不同类型的字符(标点符号、字母、[…])选择不同的停顿时间、触发事件等。


显示文本

打字机包含通用设置和事件监听器,并允许不同的停顿/计时模式:

  • 按字符:一个字母接着一个字母显示。

  • 按单词:按单词逐步显示文本。

circle-check

你的打字机应该看起来像这样:

在检视器中的 TypewriterComponent:

circle-exclamation

你可以通过两种主要方式启动打字机:

如果你想使用打字机, 建议通过代码将文本直接设置到该组件上。

如果你使用 TextMeshPro,请替换引用 TMPro 或 Text Animator 的脚本(设置文本)并引用 Febucci.TextAnimatorForUnity.TypewriterComponent 来代替。

  • 不要:“tmproText.text = textValue;” ,或 "textAnimator.SetText(textValue);"

  • 请使用: typewriter.ShowText(textValue);

B) 自动识别

如果你没有遵循上述步骤,当你添加了 Typewriter 组件或通过 UI Toolkit 的 AnimatedLabel 设置了 “Timings” 时,TextAnimator 仍会尝试自动启动打字机。

circle-exclamation

控制字母

开始与停止打字

在组件的检视器内你会找到一些选项来控制打字机何时开始触发:

  • 启动打字机模式:告诉打字机何时开始显示字母。

说明

仅通过脚本

打字机只能通过调用来启动 TextAnimatorPlayer.StartShowingText()arrow-up-right

OnEnable

每当 gameObject 被设置为激活时,打字机会启动

OnShowText

一旦设置了新文本,打字机就会开始(如“显示文本”部分所述)

自动来自所有事件

以上所有

  • 在启动时重置打字速度:如果为 true,则每次显示新文本时打字机速度将重置为 1,否则会保存上次使用的速度。

circle-check

跳过整个文本

要跳过整个打字效果,你可以调用 typewriter.SkipTypewriter() 方法。

你还可以找到一些选项来控制其行为:

  • 在跳过时隐藏出现效果:如果为 true,则在打字机跳过时会阻止出现效果播放(即文本将立即显示)。

  • 在跳过时触发事件:如果为 true,则一旦打字机跳过将触发所有剩余事件(如果你使用这些事件运行某些游戏逻辑要小心,因为所有事件会同时执行)。在此处阅读有关事件的更多信息: 在打字时触发事件

跳过文本的特定部分

circle-exclamation

隐藏文本

你可以通过脚本动态隐藏字母,调用 typewriter.StartDisappearingText(),并且你也可以随时通过调用来停止它 typewriter.StopDisappearingText().


circle-info

你可以创建你自己的计时等待(阅读 这里 通过 C# 的方法)或者你可以使用内置的等待。

选项

打字机可能共用相同的设置也可能有各自特定的设置,因此请确保在检视器中将鼠标悬停在其字段上以显示每个字段的工具提示。

下面是最重要/常见设置的快速概述:

回调(Unity 事件)

你可以使用基于打字机活动触发的 Unity 事件(例如:当它刚结束显示文本时)。

事件
说明

OnTextShowed

在整个文本显示完后调用的事件(如果你将“使用打字机”设置为 true,它将等到所有字母都显示完毕)

OnTextDisappeared

一旦脚本开始隐藏最后一个字母即调用

下面的功能只有在“使用打字机” 设置为 true:

事件
说明

OnTypewriterStart

在打字机开始显示第一个字母之前立即调用。 如果打字机关闭则不会起作用,因为那种情况下它会与 “OnTextShowed” 事件同时发生 (在这种情况下你可以改用那个事件)

OnCharacterVisible(Char)

每当一个字符变为可见时调用

OnMessage(EventMarker)

每当打字机在文本中遇到消息/事件时调用。阅读有关事件的更多内容 这里

circle-info

打字机使用其链接的文本动画器 时间缩放 来推进时间(你可以在此处阅读更多: 动画器设置),这意味着如果时间设置为“未缩放”,即使你的游戏暂停,打字机也会继续进行。