动态显示和隐藏字母

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


显示文本

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

  • 按字符:逐字显示。

  • 按单词:逐词推进文本。

你的打字机应如下所示:

在检查器中的 TypewriterComponent 里:


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

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

如果你使用的是 TextMeshPro,请将引用 TMPro 或 Text Animator(设置文本)的脚本替换为引用 Febucci.TextAnimatorForUnity.TypewriterComponent

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

  • 应当: typewriter.ShowText(textValue);

B) 自动识别

如果你没有按上面的步骤操作,只要你添加了 Typewriter 组件,或在 UI Toolkit 的 AnimatedLabel 中设置了“Timings”,TextAnimator 仍会尝试自动启动打字机。


控制字母

开始和停止输入

在该组件的检查器中,你会找到一些选项,用于控制打字机的启动触发方式:

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

说明

仅通过脚本

打字机只能通过调用 TextAnimatorPlayer.StartShowingText()

OnEnable

每次 gameObject 设为激活时,打字机都会启动

OnShowText

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

从所有事件自动启动

以上全部

  • 启动时重置打字速度:如果你希望每次显示新文本时打字机速度都重置为 1,则设为 true;否则将保留上一次使用的速度。

跳过整段文本

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

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

  • 跳过时隐藏出现效果:如果你希望在打字机跳过时不播放出现效果,则设为 true(这意味着文本会立即显示)。

  • 跳过时触发事件:如果你希望在打字机跳过后触发所有剩余事件,则设为 true(如果这些事件包含游戏逻辑,请谨慎使用,因为所有内容都会一次性执行)。更多关于事件的信息请见: 打字时触发事件

跳过文本的特定部分

隐藏文本

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


你可以创建自己的计时等待(阅读 这里 了解如何通过 C# 实现),或者使用内置的等待方式。

选项

不同打字机可能共享相同的设置,也可能有各自特定的设置,因此请务必将鼠标悬停在检查器中的字段上,以显示每个字段的提示。

下面是最重要/最常见选项的简要概览:

回调(Unity 事件)

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

事件
说明

OnTextShowed

整段文本显示完毕后调用的事件(如果你将“Use Typewriter”设为 true,它会等待直到所有字母都显示完毕)

OnTextDisappeared

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

以下内容仅在“use typewriter” 设置为 true:

事件
说明

OnTypewriterStart

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

OnCharacterVisible(Char)

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

OnMessage(EventMarker)

每当打字机在文本中遇到消息/事件时触发。更多关于事件的信息 这里

打字机使用其关联的 Text Animator 时间缩放 来推进时间(你可以在这里了解更多: 动画器设置),这意味着如果时间设置为“Unscaled”,那么即使游戏暂停,打字机也会继续推进。