高级概念

在幕后,Text Animator 正在做大量工作和优化以确保:

  • 动画期间没有垃圾回收 (在设置文本时仍然会有一些垃圾回收,TMPro 和 Text Animator 2.0 也是如此,但我们正在努力解决!)

  • 该资源与不同的 Unity 版本、系统和平台兼容

  • 为你提供尽可能简单的 API (把痛苦留给我们,但这正是目的!)

  • 即使在存在错误设置或空引用的情况下,功能也能尽可能正常工作

也就是说,当你开始编写自定义脚本时,Text Animator for Unity 内部有一些关键概念需要了解:


核心库

Text Animator 被分为两个主要命名空间:

  • Febucci.TextAnimatorCore” 是我们的 核心库, 这是随包一起提供的运行时 DLL,是使一切正常工作的基础。

  • Febucci.TextAnimatorUnity” 是 Unity 实现,从可脚本化对象到 MonoBehaviours 等。

你将在接下来的页面/指南中找到如何按预期设置脚本,但请注意你继承、修改或重新实现的内容!

我会持续更新核心库以实现新功能或重组结构,而不可能预见人们在 C# 中可能做出的各种变体和用例(尤其是非预期的情况)——所以请遵循指南!无论如何我会尽可能将内容标记为 internal,并尽量保持 Unity 实现跨版本向后兼容(像我过去这些年一直做的那样,必要时也会包含更新指南)——但如果你要做一些未计划的修改,请自担风险!

circle-exclamation

无状态 vs 有引用的元素

大多数 Text Animator 元素(包括效果、动作、播放器和曲线)有两种实现方式。一种独立于 Unity 和 GameObject/ScriptableObject,另一种则保留来自游戏状态/文件和类的引用。

类型
优点
缺点

无状态

  • 更佳的优化(将来也为 Burst 做好准备,待定)

  • 元素之间不存在竞争条件

  • 有一些代码封装,但通过资源的自定义类进行了缓解!

  • 无法基于游戏状态修改动画/打字效果

有引用的

  • 可以访问游戏状态并根据其不同地触发行为

  • 如果实现不当可能出现竞争条件(例如两个打字器同时访问同一个具有计时器或触发行为的动作)

  • 不能通过 Burst 优化(但大多数情况下应可忽略,因为内置部分承担了主要开销)

circle-info

我们也在研究一种方式,为你提供 直接 元素,意思是:移除我们所有的实现,只让你以你想要的方式挂接(鉴于现有的其他工具,这应只适用于大约 1% 的用户,但在我们看来仍然是一个重要选项)。

  • 优点: 自己动手。

  • 缺点: 自己动手。

如何自定义你的元素由你决定。

  • 在性能关键的场景下(例如存在大量字母时)选择无状态类型